lambda - Stream<Optional<List<MyClass>>> 如何从 MyClass 获取值或检查 List 是否为空

标签 lambda java-8 option-type

我正在使用 lambda 表达式。有时我需要通过这样的声明来检查我的 List<MyOwnClass> 是否为空或从中获取值。

Stream<Optional<Stream<Optional<List<MyOwnClass>>>>>

我现在面临的具体情况是以下声明:

Stream<Optional<List<MyOwnProductClass>>> streamProduct;

如果我有这样的东西:

Optional<List<MyOwnProductClass>> optionalProduct

我可以这样访问:optionalProduct.get().isEmpty()因为get()是一个可选的方法,但不确定如何使用 Stream 来实现它,因为不存在相同的方法。对于以下声明:

Stream<Optional<List<MyOwnProductClass>>> streamProduct;

不可能做这样的事情:streamProduct.get().get().isEmpty(); // streamProduct.get() -> Error as it doens't exist that method

知道如何获得我需要的东西吗?谢谢

最佳答案

你可以这样做(假设你在该流中有一个元素):

streamProduct.findFirst().get().get().isEmpty()

但重点是 Optional在这种情况下,如果您调用 get直接地?当然,这些声明是可怕的——我根本没有其他词来形容它们;从重构开始(如果它在您的控制之下)。

包装List有什么意义?进入Optional - 如果不需要元素,只需返回一个空列表,当然将其包装到 Stream 中不幸的是,这让情况变得更糟。

关于lambda - Stream<Optional<List<MyClass>>> 如何从 MyClass 获取值或检查 List 是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52634754/

相关文章:

c# - List<T>.SelectMany()、Linq 和 lambda

java - 尝试通过反射访问内部类构造函数的参数注释时出现 ArrayIndexOutOfBoundsException

c# - lambda 参数如何映射到 TakeWhile 中?

c# - 从列表中删除所有内容,其中每行不包含另一个列表中的任何项目

python - 使用 map 和 lambda 计算字典中的频率

java - 如何在 Java8 项目中使用 Http Client API(自 Java 9 起)

java - 为什么 .filter 不从我的 Map<String,Object> 中删除空值

android - Java 8 "Optional"不好的做法?

swift - 为什么可选常量不会自动具有默认值 nil

java - 语句 lambda 可以替换为表达式 lambda