class A {
private Collection<B> b;
}
class B {
String field;
private Collection<C> c;
}
class C {
String Name;
}
现在我想通过循环集合C
并传递B
作为参数来检查类name
(Name)中的值是否相等。我们如何使用Java中的流来实现这一目标?
答案 0 :(得分:1)
您可以按如下方式获得结果:
List<C> result = myList.stream()
.flatMap(a -> a.getB().stream())
.flatMap(b -> b.getC().stream())
.filter(c -> Objects.equals(c.getName(), searchName))
.collect(Collectors.toList());
这将从myList(List<A>
)创建一个流,然后连续展平嵌套集合以获取Stream<C>
,然后返回提供C
的{{1}}个对象然后最终将其收集到列表实例。
答案 1 :(得分:0)
这将通过过滤列表C
来创建列表A
,其名称等于yourName
List<A> listA = ...
List<C> filteredA = listA.stream()
.map(A::getB)
.flatMap(Collection::stream)
.map(B::getC)
.flatMap(Collection::stream)
.filter(c -> yourName.equals(c.getName()))
.collect(Collectors.toList());