有没有办法使用流返回 bean 的属性,或者如果 bean 不存在则返回 null?
类似于:
String property = beans.stream()
.filter(bean -> bean.getId() == id).findFirst().orElse(null).beanProperty();
最佳答案
首先,让我们编写一些代码行,然后我们将对其进行分析。
实现此目标的最佳方法是执行以下操作:
String property = beans.stream()
.filter(bean -> bean.getId() == id)
.findFirst()
.map(Property::beanProperty)
.orElse(null);
这里有一些解释:
- 首先,我们使用
Stream
过滤属性列表,以便使用filter
方法仅保留具有给定 ID 的属性。这会将Stream
转换为Stream
; - 然后,我们使用
map
获取 bean 属性。请注意,当且仅当后者不为空时,此方法才会将所需的映射函数应用于Optional
的内容。另请注意,我假设我们的属性有一个名为Property
的 POJO,并且我使用方法引用来获取该属性。这相当于编写.map(prop -> prop.beanProperty())
; - 最后,我们调用
Optional
的orElse
,这等效于获取 Optional 的内容(如果不为空)或获取参数中给定的值,在我们的例子中空
。
最后,请注意 map
函数的签名如下:
public<U> Optional<U> map(Function<? super T, ? extends U> mapper)
后者因此在 Optional
上应用函数并返回 Optional
。
关于Java 8 Stream 返回属性或 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47415592/