Persons = personDao.getFileInformation(filePath)
.skip(1)
.map(this::getPerson)
.filter(person -> person != null)
.collect(Collectors.toList());
getFileInformation(filePath) returns Stream<String> 在读取文件中的行之后。
我想将getPerson方法替换为基于枚举值的getMale或getFemale方法。
public enum gender {
male,female
}如何使用lambda表达式来实现这一点?
发布于 2017-02-08 06:57:26
如果您只想按性别进行筛选(假设有像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);如果您只想使用一种方法来简化filter-谓词(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;
}https://stackoverflow.com/questions/42104621
复制相似问题