使用Java 8 Streams对集合进行分组和排序

aka*_*iza 2 java lambda grouping java-8

我有一个根据他们的年龄分组的人员列表(group1的年龄<20,group2的年龄> = 20),并根据姓名和年龄使用Java 8对每个组进行排序:人员列表:

第1组:

Ane 12
Col 14
Run Code Online (Sandbox Code Playgroud)

第2组:

James 24
thomas 34
Xavier 55
Run Code Online (Sandbox Code Playgroud)

我想用Java 8做这样的事情:

list.stream().collect(Collectors.groupingBy(...
Run Code Online (Sandbox Code Playgroud)

Sha*_*ick 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))
Run Code Online (Sandbox Code Playgroud)

感谢Christoffer提出的改进建议:斯堪的纳维亚Java必须像一套宜家装配说明一样光滑:)

  • 你应该使用`Comparator.comparing(Person :: getAge)`. (2认同)