gpt4 book ai didi

Java 流 - 在可空列表上进行流式处理的优雅方式

转载 作者:行者123 更新时间:2023-12-05 01:06:28 28 4
gpt4 key购买 nike

这件事困扰了我一段时间。
所以我有一个 Product 类,它有一个 Image 列表(该列表可能为空)。
我想做

product.getImages().stream().filter(...)

但是由于 product.getImages() 可能为空,我不能直接在上面做,而是必须用 Optional.ofNullable(...).ifPresent(.. .)

Optional.ofNullable(product.getImages())
.ifPresent(imgs->imgs.stream().filter(...))

在我看来,即使与以下相比,它看起来也很麻烦:

if(product.getImages() != null){
product.getImages().stream().filter(...)
}

假设我无法更改 Product::getImages(使其不返回 null),有没有更优雅的方法?

最佳答案

Optional.stream ,如果可选项为空,则为您提供一个空流,否则它是由可选项包裹的元素的单例流。

你可以这样做:

Stream<Image> imageStream = 
Optional.ofNullable(product.getImages())
.stream()
.flatMap(Collection::stream)
.filter(...);
如果 getImages 返回 null,则

imageStream 将为空。

还有Stream.ofNullable (感谢 Holger 的提醒!),可以替换 Optional.ofNullable(product.getImages()).stream()

Stream<Image> imageStream = 
Stream.ofNullable(product.getImages())
.flatMap(Collection::stream)
.filter(...);

关于Java 流 - 在可空列表上进行流式处理的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69186302/

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