【发布时间】:2016-08-10 22:33:45
【问题描述】:
有没有办法使用一些谓词和 java 流过滤内部和外部列表?例如:
Class outerObject{
int num;
List<innerObject> innerObjectList;
}
Class innerObject{
int num;
}
List <outerObject> outerObjectList
有没有办法过滤列表,使outerObject 列表具有字段num = 10,并且对应outerObject 的innerObject 列表也被相应字段num = 10 过滤?
我试过了:
outerObjectList.stream()
.filter(i -> i.getNum() == 10)
.filter(i -> i.getOrders().stream().anyMatch(s -> getNum() == 10))
.collect(Collectors.toList());
但它似乎没有过滤内部列表。
描述性示例:
如果一个外部列表有 3 个带有 num = 10 的对象,并且 3 个对象中的每一个在它们的 innerObjectList 中有 1 个带有 num = 10 的内部对象,那么它应该给我一个列表 3 outerObject 和一个列表 1 innerObject每个。
【问题讨论】:
-
"描述性示例:如果一个外部列表有 3 个 num = 10 的对象,并且 3 个对象中的每一个在其 innerList 中有 1 个内部对象,其 num =10 那么它应该给我一个 3 个外部对象的列表每个都有一个包含 1 个内部对象的列表。”当您还描述它实际在做什么时,描述性示例会更好。 :) 另外,在这种情况下,它根本不应该修改任何东西?
-
如果我让您感到困惑,我深表歉意。我只想根据谓词过滤内部列表,而外部列表也根据使用流的某些谓词进行过滤。
-
所以,要明确一点:如果 OuterObject 包含混合的 InnerList,您想使用 Streams 来保留 Outer Object,但将 InnerList 更改为过滤后的版本,对吗?
-
@EdwardPeters 是的,没错。同时还要确保外部对象也符合标准。
-
是的。请参阅我的答案(现在我确定我们在同一页面上,我将进行更详细的编辑。)
标签: java list java-8 java-stream