我想得到一个可选的值,我有这样的东西:
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<String> value =
Optional.ofNullable(MyObject.getPeople())
.ifPresent(people -> people
.stream()
.filter(person -> person.getName().equals("test1"))
.findFirst()
.map(person -> person.getId()))
.orElse(null);
知道吗?谢谢
4条答案
按热度按时间svujldwt1#
2ekbmq322#
Optional.ifPresent
接受一个Consumer
-所以你不能从它返回任何东西。使用Optional.map
。更好的方法是使用
flatmap
,并且在结尾不返回null(不建议将null
分配给Optional变量)MyObject.getPeople
返回一个集合,那么就不需要用Optional来 Package 它(除非返回值可能是 null -但同样,当返回类型是Collection时,建议不要返回 null)。a0x5cqrl3#
假设people是
Collection
,第一次使用Optional是不需要的,你可以这样做,如果存在一个值,它将返回它,否则它将返回一个空的Optional。
2uluyalo4#
实际上你不需要一个嵌套的lambda来完成这个任务,而是在
orElse
上返回Collections.emptyList()
。