Lambda 溪流<;可选<;列表<;MyClass>&燃气轮机&燃气轮机;如何从MyClass中获取值或检查列表是否为空

Lambda 溪流<;可选<;列表<;MyClass>&燃气轮机&燃气轮机;如何从MyClass中获取值或检查列表是否为空,lambda,java-8,optional,Lambda,Java 8,Optional,我正在使用lambda表达式。有时我需要通过这样的声明来检查我的列表是否为空或从中获取值 Stream<Optional<Stream<Optional<List<MyOwnClass>>>>> 这样做是不可能的:streamProduct.get().get().isEmpty();//streamProduct.get()->错误,因为该方法不存在该方法 知道我怎样才能得到我需要的吗?谢谢您可以这样做(假设该流中只有一个元素):

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

Stream<Optional<Stream<Optional<List<MyOwnClass>>>>>
这样做是不可能的:
streamProduct.get().get().isEmpty();//streamProduct.get()->错误,因为该方法不存在该方法

知道我怎样才能得到我需要的吗?谢谢

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

但是,如果您直接调用
get
,那么在这种情况下,
Optional
的重点是什么?当然,这些声明是可怕的——我只是没有其他词语来描述它们;从重构开始(如果它在您的控制之下)


列表
包装成
可选
有什么意义?如果不需要任何元素,只需返回一个空列表,当然,将其包装成
会使情况更糟,不幸的是

谢谢,成功了!!!事实上,我正试图分析一个大的lambda表达式,为了理解它,我开始划分它。这就是为什么有一个像上面这样的声明,因为它是我自己的一个。Thanks@William嗯,我想这是一个很好的开始,但是你自己想想,一个单一元素的
,它包含一个包装列表的
可选
。。。我要做的第一件事就是重构,一旦弄清楚发生了什么。通过适当的重构,事情会变得更干净。另外,直接在
可选
上调用
get
是一件非常糟糕的事情,如果该可选实际上是
空的
,您应该修复产生类似
流的奇怪代码。
Stream<Optional<List<MyOwnProductClass>>> streamProduct;
Stream<Optional<List<MyOwnProductClass>>> streamProduct;
streamProduct.findFirst().get().get().isEmpty()