首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Optional<List> Java8 lambda表达式获得第一个元素

Optional<List> Java8 lambda表达式获得第一个元素
EN

Stack Overflow用户
提问于 2018-08-23 01:44:51
回答 2查看 45.3K关注 0票数 12

我是新手,正在努力尝试java 8 streams + lambda。有没有人能帮我写下面这段代码?需要从列表中找到第一个人的年龄,这是可选的。此列表可以为空。

代码中缺少-列表第一个元素的null检查。我也想要这张支票。

等同于下面这段代码。

代码语言:javascript
运行
复制
//input parameter 
//Optional<List<Person>> persons
public Integer getAgeOfFirstPerson(Optional<List<Person>> persons) {
    if (!persons.isPresent()) {
        return null;
    }

    Integer age = persons.get()
        .get(0)
        .getAge();

    return age;
}

//Person.java
class Person {
    Integer age;
    //getters and setters
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-23 07:06:29

假设Optional中的List可以为空,那么您也应该考虑到这种情况。因此,最简单的方法是:

代码语言:javascript
运行
复制
return persons.flatMap(list -> list.stream().findFirst()).map(Person::getAge).orElse(null);

不幸的是,这不能处理null第一个列表条目,因为当findFirst()的第一个元素为NullPointerException时,Stream会抛出null (正如Holger在注释中指出的那样)。

因此,如果您想跳过null列表条目并采用第一个非空条目,请执行以下操作:

代码语言:javascript
运行
复制
return persons.flatMap(list -> list.stream().filter(Objects::nonNull).findFirst())
              .map(Person::getAge)
              .orElse(null);

否则,如果你总是想要第一个条目,即使它是null,你可以这样修改它:

代码语言:javascript
运行
复制
return persons.flatMap(list -> list.stream().limit(1).filter(Objects::nonNull).findFirst())
              .map(Person::getAge)
              .orElse(null);

然而,这确实变得相当复杂,所以更简单的方法是返回到测试列表是否为空:

代码语言:javascript
运行
复制
return persons.filter(list -> !list.isEmpty())
              .map(list -> list.get(0))
              .map(Person::getAge)
              .orElse(null);
票数 23
EN

Stack Overflow用户

发布于 2018-08-23 02:05:51

您可以使用Optional.map

代码语言:javascript
运行
复制
public int getAgeOfFirstPerson(Optional<List<Person>> persons){ 
    return persons.map(people -> people.get(0).getAge()).orElse(0);
}

请注意,原语没有null(它们不是对象),因此用0替换了它。

或者进一步改进为answered by @Alexey,如果需要也检查Person是否为空。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51972457

复制
相关文章

相似问题

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