gpt4 book ai didi

lambda - optional Java 8 lambda 表达式获取第一个元素

转载 作者:行者123 更新时间:2023-12-04 17:15:15 27 4
gpt4 key购买 nike

我是这里的新手,正在努力通过 Java 8 流 + lambda。有人可以帮我处理下面的代码吗?需要从列表中找到第一人称的年龄,这是 optional 。此列表可能为空。

代码中缺少 - 对列表的第一个元素进行空检查。也想办理这张支票。

相当于下面的一段代码。

//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
}

最佳答案

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

return persons.flatMap(list -> list.stream().findFirst()).map(Person::getAge).orElse(null);

不幸的是,这不能处理 null第一个列表条目为 findFirst()抛出 NullPointerExceptionStream 的第一个元素是 null (正如霍尔格在评论中指出的那样)。

所以如果你想跳过 null列出条目并取第一个非空条目,请执行以下操作:
return persons.flatMap(list -> list.stream().filter(Objects::nonNull).findFirst())
.map(Person::getAge)
.orElse(null);

否则,如果您总是想要第一个条目,即使它是 null ,你可以这样调整它:
return persons.flatMap(list -> list.stream().limit(1).filter(Objects::nonNull).findFirst())
.map(Person::getAge)
.orElse(null);

然而,这真的变得非常复杂,因此返回测试列表是否为空会更简单:
return persons.filter(list -> !list.isEmpty())
.map(list -> list.get(0))
.map(Person::getAge)
.orElse(null);

关于lambda - optional <List> Java 8 lambda 表达式获取第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51972457/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com