首页 > 解决方案 > 使用 Java 8 Streams 如何使用一个列表获取两个不同的列表

问题描述

假设我有员工数据列表。

class Employee {
   private long id;
   private String name;
   private int age;
   // Constrctor
   // setters & getters
}
List<Employee> empList = ...;

使用上面的 empList,如何使用Java8 流将两个不同的列表(例如age > 20到一个列表和age < 20到一个列表中) 。

标签: javajava-8java-stream

解决方案


你可以使用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));
}

输出:

[Employee{age=10}, Employee{age=15}]
[Employee{age=21}, Employee{age=22}]

推荐阅读