用流映射的Java 8列表(避免重复)

时间:2016-04-28 15:44:49

标签: java dictionary java-8 duplicates

我有两个班级:

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

的duplaicates元素
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)

我想知道是否有办法通过同时删除重复项来收集地图。

2 个答案:

答案 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()方法在进一步处理之前消除重复项。