java - 使用 Java 8 流对集合进行分组和排序

标签 java lambda java-8 grouping

我有一个人员列表,我想根据他们的年龄对其进行分组(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(...

最佳答案

您可以通过以下方式获得您想要的内容:

  • 按年龄(然后是姓名)对所有人员进行排序。
  • 对其进行分区。

请注意,每个分区的顺序将保持不变:

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 必须像一套 IKEA 组装说明一样流畅:)

关于java - 使用 Java 8 流对集合进行分组和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40577012/

相关文章:

java - 如何实现线程安全的收集器?

Java 8 - 使用 JsonObject (javax.json) - 如何确定一个节点是否有子节点?

java - 不要在 Activity 销毁时销毁绑定(bind)服务

java - LWUIT TextField 数字默认输入模式不适用于物理 QWERTY 键盘

c# - 使用 LINQ ExpressionVisitor 将原始参数替换为 lambda 表达式中的属性引用

Java 属性和 lambda 收集

java - 谁在把元素放入HashMap时调用了类的equals方法?

java - 在本地机器上运行 ignite

Java OracleDB 连接第一次花费太长时间

c# - 为什么带有运算符的一个 lambda 表达式可以工作,而另一个则不行