有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

集合Java按内部列表值分组

class A {    
    private Collection<B> b;    
}

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

class C {
    String Name;
}

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


共 (2) 个答案

  1. # 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>,然后返回具有提供的searchNameC对象,最后将其收集到列表实例

  2. # 2 楼答案

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

    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());