java - Lambda 表达式和可选如何返回字符串值
问题描述
我想获得一个可选值,我有这样的东西:
Optional<String> value =
Optional.ofNullable(MyObject.getPeople())
.ifPresent(people -> people
.stream()
.filter(person -> person.getName().equals("test1"))
.findFirst()
.map(person -> person.getId()));
person.getId() 应该返回一个字符串,我试过了,但是没有用,得到不兼容的类型:void 无法转换为 java.util.Optional
Optional<String> value =
Optional.ofNullable(MyObject.getPeople())
.ifPresent(people -> people
.stream()
.filter(person -> person.getName().equals("test1"))
.findFirst()
.map(person -> person.getId()))
.orElse(null);
任何想法?谢谢
解决方案
Optional.ifPresent
需要Consumer
- 所以你不能从中返回任何东西。使用Optional.map
.
Optional.ofNullable(MyObject.getPeople())
.map(people -> people
.stream()
.filter(person -> person.getName().equals("test1"))
.findFirst()
.map(person -> person.getId()))
.orElse(null);
更好的方法是使用flatmap
而不是最后返回 null(不建议分配null
给 Optional 变量)
Optional.ofNullable(MyObject.getPeople())
.flatmap(people -> people
.stream()
.filter(person -> person.getName().equals("test1"))
.findFirst()
.map(person -> person.getId()));
注意:你的第一句话也有点奇怪。如果MyObject.getPeople
返回一个集合,则不需要用 Optional 包装它(除非返回值可以为null - 但同样,当返回类型为 Collection 时,建议不要返回null )。
推荐阅读
- pandas - 如何从 Pandas 数据框中获取一组值?
- javascript - Javascript-如何在另一个函数内使用 push 方法将字符串推送到对象内的数组?
- react-native - TypeError: undefined is not an object (evalating '_this.state.data.name.filter') 反应原生
- git - Git 可以支持的最大最优 repo 大小是多少?
- excel-formula - 我有数据并设定了限制。我想确定有多少数据超出限制以及多少
- php - PayPal IPN HTTP 错误 400 - PHP - 使用 PayPal GIT 代码
- python - Pyinstaller 和请求库
- python-3.x - 仅使用 Python 的 BeautifulSoup 提取列内容,以便每行的所有列都在同一行中
- r - 如果行中的其他两个值相互匹配,则创建一个新变量来比较行中的值?
- apache-spark - 动态分区无法从 Spark 流式传输到 Hive(ORC 格式)