如何在Java流中应用groupBy过滤

18 浏览
0 Comments

如何在Java流中应用groupBy过滤

如何使用Java流先进行分组,然后再应用过滤?

示例:考虑这个Employee类:

我想按部门分组,并列出薪水大于2000的员工列表。

这是我可以做到这一点的方法:

List list = new ArrayList<>();

list.add(new Employee("A", 5000, "A1"));

list.add(new Employee("B", 1000, "B1"));

list.add(new Employee("C", 6000, "C1"));

list.add(new Employee("C", 7000, "C2"));

Map> collect = list.stream()

.filter(e -> e.getSalary() > 2000)

.collect(Collectors.groupingBy(Employee::getDepartment));

输出:

{A=[Employee [department=A, salary=5000, name=A1]],

C=[Employee [department=C, salary=6000, name=C1], Employee [department=C, salary=7000, name=C2]]}

由于部门B中没有薪水大于2000的员工,所以没有B部门的键:

但实际上,我希望有一个空列表的键 -

预期输出:

{A=[Employee [department=A, salary=5000, name=A1]],

B=[],

C=[Employee [department=C, salary=6000, name=C1], Employee [department=C, salary=7000, name=C2]]}

我们如何做到这一点?

0