java-使用Stream API嵌套的foreach
作者:互联网
我有一个案例,其中A有一个B的列表,而B具有我需要的一些属性.
pseudocode structure
class A
List<B> elements;
class B
Property property;
我有A的列表.为了获取属性,我应该通过两次foreach循环来获取我想要的属性.像这样:
String myFutureProp = null;
for (A a: list of A) {
for(B b: list of B) {
if("MY_PROPERTY".equals(b.getKey) {
myFutureProp = b.getValue();
}
}
}
我当时想使用Stream API使它更美味.我很期待
forEach()解决方案:
final String[] myFutureProp = {null}
a.getElements()
.foreach(b -> b.getElements().stream()
.filter("MY_PROPERTY"::equals)
.forEach(prop -> myFutureProp[0] = (String)prop.getValue);
然后我正在使用myFutureProp [0],但说实话这看起来很难看.我可以使用Stream API中的其他解决方案吗?
解决方法:
我希望我的课程结构正确.
您可以使用flatMap获取所有B实例的所有Property的Stream,并返回具有所需键的任何属性(如果找到):
Optional<String> myFutureProp =
aList.stream()
.flatMap(a->a.getElements().stream().map(B::getProperty))
.filter(prop->prop.getKey().equals("MY_PROPERTY"))
.map(Property::getValue)
.findAny();
标签:java-8,java-stream,foreach,java 来源: https://codeday.me/bug/20191118/2026945.html