我试图在列表列表中有效地返回对象属性(或对象)。 让我们称我的初始对象为
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
。
这可以通过流来实现吗?
非常感谢提示和帮助!
您可以使用 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();