iam*_*amP 6 lambda java-8 java-stream
我有三个对象如下:
public class A {
private int a;
private ...
private B b;
//getters setters for B
}
public class B {
private String name;
private ...
private C c;
//getters setters for C
}
public class C {
private Long id;
private ...
}
Run Code Online (Sandbox Code Playgroud)
我有一个List<A>与B'每个对象s A和C的对象在每个B.
我想在地图中按照C.id对列表进行分组 Map<C,List<A>>
我如何使用这种groupingBy方法实现这一目标Stream?
Map<Long, List<A>> resultSet =
myList.stream()
.collect(Collectors.groupingBy(e -> e.getB().getC().getId()));
Run Code Online (Sandbox Code Playgroud)
编辑:
既然你想要一个Map<C, List<A>>作为结果集的接收器类型,那么你需要覆盖equals并hashcode在你的C类中这样:
class C {
public Long getId() {
return id;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
C c = (C) o;
return id != null ? id.equals(c.id) : c.id == null;
}
@Override
public int hashCode() {
return id != null ? id.hashCode() : 0;
}
private Long id;
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以:
Map<C,List<A>> resultSet =
myList.stream()
.collect(Collectors.groupingBy(e -> e.getB().getC()));
Run Code Online (Sandbox Code Playgroud)
这意味着A具有相同的所有对象C.id将位于同一个存储桶(即组)中.
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |