java中如何返回与List<ObjectA> of List<ObjectB>(嵌套列表)中的条件匹配的对象属性?

问题描述 投票:0回答:1

我试图在列表列表中有效地返回对象属性(或对象)。 让我们称我的初始对象为

MasterObject

MasterObject 具有
List<ObjectA>
,其中 ObjectA 具有
List<ObjectB>
,该属性具有属性
ObjectC

ObjectC
有多个我想要匹配的属性(例如 String 类型、int 长度),并且我想返回
propertyID
的属性 String
ObjectC
或返回
ObjectC
本身(如果存在匹配对象)。

我能够使用流来确定此类元素是否存在anymatch

MasterObject.getListObjectA.stream()
    .anymatch(x -> x !=null && x.getListOjectB.stream().anymatch(y -> y.getObjectC().getType().equals("rf") && y.getObjectC().getLength() == 3));

现在我想获取对

ObjectC
ObjectB
的引用,以便我可以返回
ObjectB.getObjectC.ID

这可以通过流来实现吗?

非常感谢提示和帮助!

java java-stream nested-lists
1个回答
0
投票

您可以使用 Stream#flatMap 来展平嵌套流,并使用 filter 来过滤与条件匹配的

ObjectC
实例。我们可以使用
findFirst
来查找(任何)匹配的
ObjectC

 Optional<String> optionalPropertyId = objectAs.stream()
            .filter(Objects::nonNull)
            .flatMap(objectA -> objectA.getListObjectB().stream())
            .filter(objectB -> objectB.getObjectC().getType().equals("rf")
                    && objectB.getObjectC().getLength() == 3)
            .map(objectB -> objectB.getObjectC().getPropertyID())
            .findFirst();
© www.soinside.com 2019 - 2024. All rights reserved.