java - 从java 8流中获取N(3)个列表(基于ENUM性别(男,女,其他))并基于ENUM过滤条件

标签 java collections java-8 java-stream

如何根据性别枚举类型创建 N 个列表?如果我有 3 个可能的 GENDER 枚举(男、女、其他),我需要 3 个 Lists 。如何使用 java 8 流 API 实现此目的?

在这种情况下,我需要像带有 3 个键的 MAP 之类的东西。 sexMap.get(GENDER.male).

Map<GENDER, List<Person>> genderMap;

尝试使用partitioningBy

Map<Boolean, List<Person>> genderMap= people.stream().collect(Collectors.partitioningBy(malePredicate()));

System.out.println("MALE "+genderMap.get(true));
System.out.println("FEMALE "+genderMap.get(false));

private static Predicate<Person> malePredicate(){
    return p ->  p.getGender() != null && p.getGender().equalsIgnoreCase("male");
}

private static Predicate<Person> femalePredicate(){
    return p ->  p.getGender() != null && p.getGender().equalsIgnoreCase("female");
}
  • 男性 [人物 [id=1,姓名=SAMPLE_1,年龄=11,性别=男,sal=100, 每月费用金额=120.00],人员[id=2,姓名=SAMPLE_2,年龄=12, 性别=男,sal=100,monthlyExpenseAmount=120.00]]
  • 女性 [人员 [id=0、name=SAMPLE_0、年龄=10、性别=其他、sal=100, 每月费用金额=120.00],人员[id=3,姓名=SAMPLE_3,年龄=13, 性别=女,sal=100,monthlyExpenseAmount=100.00],人[id=4, 姓名=SAMPLE_4,年龄=14,性别=女,萨尔=100, monthlyExpenseAmount=100.00],人员 [id=5,姓名=SAMPLE_5,年龄=15, 性别=女,sal=100,monthlyExpenseAmount=100.00]]

最佳答案

使用groupingBy()toList():

Map<Gender, List<Person>> genderMap = people.stream()
        .collect(Collectors.groupingBy(Person::getGender, Collectors.toList()));

参见IDEONE用于演示。

关于java - 从java 8流中获取N(3)个列表(基于ENUM性别(男,女,其他))并基于ENUM过滤条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56960911/

相关文章:

javascript - Meteor.js 按字段中的值过滤集合

java - 如何在 JPA 对象上使用 Java Stream API?

java - 是否有任何功能或设置可以在 intellij-idea 的父目录中显示编译错误

java - DAO 层测试 : java. lang.IllegalStateException:配置错误:为测试类找到多个@BootstrapWith 声明

java - 如何获取文档字段的 TokenStream 以用于突出显示?

Java迭代器值(value)维持

java - JPA 在注释中使用变量架构名称

java - ArrayList<Integer> 是否允许添加字符串?

Java 8 流组合器从未调用过

java - 如何使用 java 8 和流将属性值从列表第一个元素传播到所有列表元素?