编程语言
首页 > 编程语言> > java-使用Stream API嵌套的foreach

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