Java 8 Streams由收集器分组

时间:2018-01-26 08:23:12

标签: java java-8 java-stream

如何使用java 8流获取此数据结构。

class A {
    B b;

    public A(B b) {
        this.b = b;
    }
}

class B {
    List<A> as;
    private int i;
    public B(int i) {
        this.i = i;
    }
}

这是我的对象结构。我试图把它聚合到,

 Map<A, List<B>> bs

来自,

List<A> as = new ArrayList<>();
    as.add(a1);
    as.add(a2);
    as.add(a3);

2 个答案:

答案 0 :(得分:7)

使用groupingBy:

Map<B, List<A>> bs = as.stream().collect(Collectors.groupingBy(A::getB));

假设班级AgetB()方法。

答案 1 :(得分:7)

实际上非常简单(假设hashCode/equals中存在B

as.stream()
  .collect(Collectors.groupingBy(A::getB))