我有两个班级:
public class Adegae implements java.io.Serializable {
private AdegaeId id;
...
}
和
public class AdegaeId implements java.io.Serializable {
private String gpi;
private String mccode;
private String aecode;
...
}
我还有一个列表,其中包含aecode
:
List<Adegae> adegaes = ...
我按照这样构建我的地图:
Map<String, Adegae> adegaeMap = adegaes.stream()
.collect(Collectors.toMap(adegae -> adegae.getId().getAecode().trim(),
Function.identity()));
当我运行我的代码时,我得到了这个例外:
java.lang.IllegalStateException: Duplicate key my.package.Adegae@678e3d87
at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
at java.util.HashMap.merge(HashMap.java:1245)
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
我想知道是否有办法通过同时删除重复项来收集地图。
答案 0 :(得分:1)
Map<String, Adegae> adegaeMap = adegaes.stream()
.collect(Collectors.toMap(adegae -> adegae.getId().getAecode().trim(),
Function.identity(), (e1, e2) -> e1));
可能有助于您的案例
答案 1 :(得分:0)
您可以在Stream
上使用distinct()
方法在进一步处理之前消除重复项。