首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >map方法java 8中的条件方法调用

map方法java 8中的条件方法调用
EN

Stack Overflow用户
提问于 2017-02-08 04:18:13
回答 1查看 2.1K关注 0票数 2
代码语言:javascript
复制
Persons = personDao.getFileInformation(filePath)
                    .skip(1)
                    .map(this::getPerson)
                    .filter(person -> person != null)
                    .collect(Collectors.toList());

getFileInformation(filePath) returns Stream<String> 

在读取文件中的行之后。

我想将getPerson方法替换为基于枚举值的getMalegetFemale方法。

代码语言:javascript
复制
public enum gender {
male,female
}

如何使用lambda表达式来实现这一点?

EN

回答 1

Stack Overflow用户

发布于 2017-02-08 06:57:26

如果您只想按性别进行筛选(假设有像Person.getGender这样的访问器),那么只需要添加一个filter

代码语言:javascript
复制
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());

如果您想对结果进行分组,以下内容将对您有所帮助:

代码语言:javascript
复制
Map<gender, List<Person>> peopleByGender;
peopleByGender = personDao.getFileInformation(filePath)
                          .skip(1)
                          .map(this::getPerson)
                          .filter(Objects::nonNull)
                          .collect(Collectors.groupingBy(Person::getGender));

现在通过以下方式访问所有女性:

代码语言:javascript
复制
List<Person> femalePeople = peopleByGender.get(gender.female);

男的有:

代码语言:javascript
复制
List<Person> malePeople = peopleByGender.get(gender.male);

如果您只想使用一种方法来简化filter-谓词(p -> p.getGender() == gender.male),那么可以使用以下方法之一:

代码语言:javascript
复制
.filter(this::getMale) // or: YourClass::getMale for a static method

其中this::getMale引用以下方法:

代码语言:javascript
复制
boolean getMale(Person p) {
   return p.getGender() == gender.male;
}

代码语言:javascript
复制
.filter(getMale())

其中getMale()引用以下方法:

代码语言:javascript
复制
Predicate<Person> getMale() {
  return p -> p.getGender() == gender.male;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42104621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档