如何基于性别枚举类型创建N个列表?如果我有3个可能的GENDER枚举(男,女,其他),则需要3个列表。如何使用Java 8 Streams 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");
}
答案 0 :(得分:2)
使用groupingBy()
和toList()
:
Map<Gender, List<Person>> genderMap = people.stream()
.collect(Collectors.groupingBy(Person::getGender, Collectors.toList()));
有关演示,请参见IDEONE。
答案 1 :(得分:0)
.partitioningBy()
用于将结果分成2组。
您正在寻找.groupingBy()
Map<Gender, List<Person>> genderMap = people.stream()
.collect(Collectors.groupingBy(Person::getGender));