Dav*_*vid 4 java collections lambda java-8 java-stream
我想获得一个Optional值,我有这样的东西:
Optional<String> value =
Optional.ofNullable(MyObject.getPeople())
.ifPresent(people -> people
.stream()
.filter(person -> person.getName().equals("test1"))
.findFirst()
.map(person -> person.getId()));
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
任何的想法?谢谢
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);
Run Code Online (Sandbox Code Playgroud)
更好的方法是使用flatmap而不是在结尾返回null(不建议分配null给Optional变量)
Optional.ofNullable(MyObject.getPeople())
.flatmap(people -> people
.stream()
.filter(person -> person.getName().equals("test1"))
.findFirst()
.map(person -> person.getId()));
Run Code Online (Sandbox Code Playgroud)
注意:你的第一个陈述也有点奇怪.如果MyObject.getPeople返回一个集合,则不需要用Optional包装它(除非返回值可以为null - 但同样,建议在返回类型为Collection时不返回null).
| 归档时间: |
|
| 查看次数: |
993 次 |
| 最近记录: |