如何根据性别枚举类型创建 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/