我有一个根据年龄分组的人员列表(group1的年龄<20,group2的年龄> = 20),并使用Java 8根据姓名和年龄对每个组进行排序: 人员名单:
第1组:
Ane 12
Col 14
第2组:
James 24
thomas 34
Xavier 55
我想用Java 8做这样的事情:
list.stream().collect(Collectors.groupingBy(...
答案 0 :(得分:7)
你可以通过以下方式获得你想要的东西:
请注意,将保留每个分区的顺序:
import static java.util.Comparator.comparing;
import static java.util.stream.Collectors.partitioningBy;
people.stream()
.sorted(
comparing(Person::getAge)
.thenComparing(Person::getName))
.collect(partitioningBy(p -> p.getAge() >= 20))
感谢Christoffer的改进建议:斯堪的纳维亚Java必须像一套宜家装配说明一样光滑:)
答案 1 :(得分:2)
您将需要使用partitioningBy
收集器。它将允许您指定谓词并返回由布尔值键入的映射:
Map<Boolean, List<?>> partitioned = list.stream().sorted(...).collect(Collectors.partitioningBy(...));