使用Java 8 Streams如何使用一个列表获取两个不同的列表

Ran*_*ddy 1 java java-8 java-stream

假设我有员工数据列表。

class Employee {
   private long id;
   private String name;
   private int age;
   // Constrctor
   // setters & getters
}
List<Employee> empList = ...;
Run Code Online (Sandbox Code Playgroud)

使用上面的empList,如何使用Java8流年龄> 20的两个不同列表分成一个列表,将年龄<20的两个列表分成一个列表。

i.b*_*nko 5

你可以用 Collectors.partitioningBy

public static void main(String[] args) {
    List<Employee> employeeList = Arrays.asList(new Employee(10), new Employee(15),
            new Employee(21), new Employee(22));

    Map<Boolean, List<Employee>> employeeGroups = employeeList.stream().
                    collect(Collectors.partitioningBy(s -> s.getAge() > 20));

    System.out.println(employeeGroups.get(false));
    System.out.println(employeeGroups.get(true));
}
Run Code Online (Sandbox Code Playgroud)

输出:

[Employee{age=10}, Employee{age=15}]
[Employee{age=21}, Employee{age=22}]
Run Code Online (Sandbox Code Playgroud)