Получить N (3) списков (на основе пола ENUM (мужской, женский, другой)) из потока Java 8 и условия фильтра на основе ENUM - PullRequest
1 голос
/ 10 июля 2019

как я могу создать N списков на основе гендерных типов Enum?Если у меня есть 3 возможных перечисления GENDER (мужской, женский, другой), мне нужно 3 списка.Как мне добиться этого с помощью API потоков Java 8?

Мне нужно что-то вроде MAP с 3 ключами в этом случае.sexMap.get (GENDER.male).

Map<GENDER, List<Person>> genderMap;

пробовал с разбиениемBy

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, возраст = 11, пол = мужчина, sal = 100, monthExpenseAmount = 120,00], человек [id = 2, имя = SAMPLE_2, возраст = 12, пол = мужчина, sal = 100, monthExpenseAmount = 120,00]]
  • FEMALE [Person [id = 0, имя = SAMPLE_0, возраст = 10, пол = другой, sal = 100, monthExpenseAmount = 120.00], Person [id = 3, имя = SAMPLE_3, возраст = 13,пол = женский, sal = 100, monthExpenseAmount = 100,00], человек [id = 4, имя = SAMPLE_4, возраст = 14, пол = женский, sal = 100, monthExpenseAmount = 100,00], человек [id = 5, имя = SAMPLE_5,возраст = 15, пол = женский, sal = 100, месячный расход на сумму = 100,00]]

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Используйте groupingBy() и toList():

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

См. IDEONE для демонстрации.

0 голосов
/ 10 июля 2019

.partitioningBy() используется для разделения результатов на 2 группы.

Вы ищете .groupingBy()

Map<Gender, List<Person>> genderMap = people.stream()
     .collect(Collectors.groupingBy(Person::getGender));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...