Stream <optional <list <myclass >>>如何从MyClass获取值或检查List是否为空

时间:2018-10-03 19:56:18

标签: lambda java-8 optional

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

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

我现在面临的特殊情况是以下声明:

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

如果我有这样的东西:

Optional<List<MyOwnProductClass>> optionalProduct

我可以这样访问:optionalProduct.get().isEmpty(),因为get()是Optional的方法,但是由于不存在相同的方法,因此不确定如何使用Stream进行操作。对于以下声明:

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

无法执行以下操作:streamProduct.get().get().isEmpty(); // streamProduct.get() -> Error as it doens't exist that method

有什么想法可以得到我所需要的吗?谢谢

1 个答案:

答案 0 :(得分:2)

您可以做的(假设流中只有一个元素):

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

但是如果您直接调用Optional,在这种情况下是get的重点吗?当然,这些声明是可怕的-我只是无话可说了。从重构它开始(如果它在您的控制之下)。

List封装到Optional中有什么意义-如果不需要元素,只需返回一个空List,当然将其封装到Stream中会使情况更糟,很不幸。