这是使用Java Streams的正确方法吗?

Vin*_*nie 3 java java-8 java-stream

我一直在摆弄Java Streams.我有一个EmployeeObject,我根据年龄对对象进行分组,我需要员工的名字.这是正确的方法,还是我使用了太多的循环?

employeeList.stream().collect(Collectors.groupingBy(person -> person.age))
    .forEach((age, person) -> {
      System.out.print("In the age " + age + " the following people are present ");
      person.forEach(name -> System.out.print(name.getFirstName() + ", "));
      System.out.println("");
    });
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 8

我将数据集合与数据表示分开.

Map<Integer,String> namesByAge = 
    employeeList.stream()
                .collect(Collectors.groupingBy(Employee::getAge, 
                                               Collectors.mapping(Employee::getFirstName,
                                                                  Collectors.joining(","))));
Run Code Online (Sandbox Code Playgroud)

现在您可以打印每个年龄组的名称:

namesByAge.forEach((age, names) ->
  System.out.println("In the age " + age + " the following people are present " + names));
Run Code Online (Sandbox Code Playgroud)

希望我的方法名称正确.根据你的代码,我假设Employee有一个getAge()返回an intgetFirstName()方法,以及一个返回a 的方法String.

  • 问题的原始代码存在细微差别,因为此解决方案没有尾随逗号.但是对于大多数用途来说,这是一个改进...... (6认同)
  • @HadiJeddizahed使用`.entrySet().stream().forEach(...)`而不仅仅是`.forEach(...)`需要你处理`Map.Entry`方法`getKey()`和`getValue() `而不是仅通过名称引用键和值.所以它复杂得多...... (5认同)