猿问

从 java 8 流中获取 N(3) 个列表(基于 ENUM 性别)并根据 ENUM 过滤条件

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


在这种情况下,我需要像带有 3 个键的 MAP 之类的东西。genderMap.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");

}

MALE [Person [id=1, name=SAMPLE_1, age=11, gender=male, sal=100, monthlyExpenseAmount=120.00], Person [id=2, name=SAMPLE_2, age=12, gender=male, sal=100 , monthlyExpenseAmount=120.00]]

FEMALE [Person [id=0, name=SAMPLE_0, age=10, gender=other, sal=100, monthlyExpenseAmount=120.00], Person [id=3, name=SAMPLE_3, age=13, gender=female, sal=100 , monthlyExpenseAmount=100.00], 人 [id=4, name=SAMPLE_4, age=14, gender=female, sal=100, monthlyExpenseAmount=100.00], Person [id=5, name=SAMPLE_5, age=15, gender=female , sal=100, monthlyExpenseAmount=100.00]]


慕娘9325324
浏览 147回答 2
2回答

冉冉说

使用groupingBy()和toList():Map<Gender,&nbsp;List<Person>>&nbsp;genderMap&nbsp;=&nbsp;people.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.groupingBy(Person::getGender,&nbsp;Collectors.toList()));演示见IDEONE 。

GCT1015

.partitioningBy()用于将结果分成 2 组。你在找.groupingBy()Map<Gender,&nbsp;List<Person>>&nbsp;genderMap&nbsp;=&nbsp;people.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.groupingBy(Person::getGender));
随时随地看视频慕课网APP

相关分类

Java
我要回答