Java按内部列表值分组 A类{ 私人收藏b; } B类{ 字符串字段; 私人收藏c; } C类{ 字符串名; }

Java按内部列表值分组 A类{ 私人收藏b; } B类{ 字符串字段; 私人收藏c; } C类{ 字符串名; },java,collections,java-8,java-stream,Java,Collections,Java 8,Java Stream,现在我想通过循环collectionB并将Name作为参数传递来检查类C(Name)中的值是否相等。我们如何使用Java中的streams实现这一点?这将通过筛选名称等于yourName的列表a,创建一个列表C class A { private Collection<B> b; } class B { String field; private Collection<C> c; } class C { String N

现在我想通过循环collection
B
并将
Name
作为参数传递来检查类
C
(Name)中的值是否相等。我们如何使用Java中的streams实现这一点?

这将通过筛选名称等于
yourName
的列表
a
,创建一个列表
C

class A {    
    private Collection<B> b;    
}

class B {
    String field;
    private Collection<C> c;
}

class C {
    String Name;
}
列表列表a=。。。
List filteredA=listA.stream()
.map(A::getB)
.flatMap(集合::流)
.map(B::getC)
.flatMap(集合::流)
.filter(c->yourName.equals(c.getName()))
.collect(Collectors.toList());

您可以实现以下结果:

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());
List 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
)创建一个流,然后连续展平嵌套集合以获得一个
stream
,然后返回具有提供的
searchName
C
对象,最后将其收集到一个列表实例。

检查完之后,您想要什么?获取包含该字符串名称的列表,或者?预期的输出是什么?不清楚您想要实现什么。一张
地图
?您希望如何处理它是嵌套集合这一事实?重复
A
?@MạnhQuyế特恩盖伊ễn是的,我想要显示类结构示例的CBeside列表,也要发布输入/开始状态示例和您期望得到的结果。没有它,你的问题就不太清楚了。不客气。稍后请明确说明您的预期输出和输入:)
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());