我有一个我想根据他们的年龄分组的人群列表(group1的年龄为< 20,group2的年龄> 20),并根据名称对每个组进行排序, 名单的人:使用Java 8 Streaming对一个集合进行分组和排序
组1:
Ane 12
Col 14
组2:使用Java 8岁
James 24
thomas 34
Xavier 55
我想使用Java 8做这样的事情:
list.stream().collect(Collectors.groupingBy(...
我有一个我想根据他们的年龄分组的人群列表(group1的年龄为< 20,group2的年龄> 20),并根据名称对每个组进行排序, 名单的人:使用Java 8 Streaming对一个集合进行分组和排序
组1:
Ane 12
Col 14
组2:使用Java 8岁
James 24
thomas 34
Xavier 55
我想使用Java 8做这样的事情:
list.stream().collect(Collectors.groupingBy(...
您将要使用partitioningBy
收集器来代替。它将允许你指定一个谓词,并返回一个布尔键控地图:
Map<Boolean, List<?>> partitioned = list.stream().sorted(...).collect(Collectors.partitioningBy(...));
你可以得到你想要的东西:
注意,每个分区的顺序将保持不变:
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))
感谢克里斯托弗,他改进建议:斯堪的纳维亚的Java必须为一组宜家汇编指令:)
一样光滑你应该使用'Comparator.comparing(Person :: getAge)'。 –
谢谢,这是更清洁的方式:) – Shastick
此外,为了使它更干净,'import static java.util.Collectors.partitioningBy'和'import static java.util.Comparator.comparing;' –
你想按姓名先排序还是先按年龄分组? –
@akaliza是关于将列表分成两组还是按多个年龄段进行分组的问题?如果是按照年龄段进行分组,则可以更新您的问题以确保清晰(并让我修复我的答案:)) – Shastick