Java 8 Streams由收集器分组

Bha*_*ath 6 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的对象结构.我想把它聚合到,

 Map<A, List<B>> bs;
Run Code Online (Sandbox Code Playgroud)

从,

List<A> as = new ArrayList<>();
as.add(a1);
as.add(a2);
as.add(a3);
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 7

使用groupingBy:

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

假设类A有一个getB()方法.


Eug*_*ene 7

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

as.stream()
  .collect(Collectors.groupingBy(A::getB))
Run Code Online (Sandbox Code Playgroud)