Если вы просто хотите, чтобы фильтровать по полу (при условии что аксессор как Person.getGender
), то вам нужно всего лишь добавить filter
:
List<Person> malePeople;
malePeople = personDao.getFileInformation(filePath)
.skip(1)
.map(this::getPerson)
.filter(Objects::nonNull)
.filter(p -> p.getGender() == gender.male) // or gender.female
.collect(Collectors.toList());
Если же вы хотите сгруппировать результаты, следующий будет помогут вам:
Map<gender, List<Person>> peopleByGender;
peopleByGender = personDao.getFileInformation(filePath)
.skip(1)
.map(this::getPerson)
.filter(Objects::nonNull)
.collect(Collectors.groupingBy(Person::getGender));
Теперь доступ ко всем женщинам людей:
List<Person> femalePeople = peopleByGender.get(gender.female);
и мужские с:
List<Person> malePeople = peopleByGender.get(gender.male);
Если вы просто хотите использовать метод, чтобы упростить фильтр-предикат (p -> p.getGender() == gender.male
), то вы можете использовать одно из следующих действий:
.filter(this::getMale) // or: YourClass::getMale for a static method
где this::getMale
относится к следующему методу:
boolean getMale(Person p) {
return p.getGender() == gender.male;
}
или
.filter(getMale())
где getMale()
относится к следующему методу:
Predicate<Person> getMale() {
return p -> p.getGender() == gender.male;
}
, что делает getMale и getFemale возвращать каждый? персона? или Мужской/Женский объект? – Eugene
@Eugene: Я бы интерпретировал этот вопрос, как в вашем (удаленном) ответе, однако, похоже, он не стоит усилий, если вопросник все равно ... – Holger
@ Хольгер Я действительно надеялся, что это привлечет некоторое внимание , потому что я действительно хотел сказать, что используя ссылку на метод, например: 'return p.getGender() == Gender.MALE? this :: getMale: this :: getFemale; 'не компилируется. Я не вырыл все глубже, но я надеялся, что как только внимание будет там, я бы это сделал. – Eugene