当List中对象属性唯一时,可以正常使用,如果有KEY重复,就会报如下错误:

Exception in thread "main" java.lang.IllegalStateException: Duplicate key a (attempted merging values FaAdmin[id=100,username=a,nickname=null,password=null,salt=null,avatar=null,email=null,loginfailure=null,logintime=null,loginip=null,createtime=null,updatetime=null,token=null,status=null] and FaAdmin[id=100,username=a,nickname=null,password=null,salt=null,avatar=null,email=null,loginfailure=null,logintime=null,loginip=null,createtime=null,updatetime=null,token=null,status=null])
at java.base/java.util.stream.Collectors.duplicateKeyException(Collectors.java:135)
at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:182)
at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at Test.main(Test.java:46)

这个时候需要去重,添加 Function.identity() 代码如下:


// List对象,转Map,以元素对象属性为KEY,对象实体为VALUE,组建Map
Map<String, FaAdmin> usernameMap = list.stream()
        .collect(Collectors.toMap(FaAdmin::getUsername, Function.identity(), (eo1, eo2) -> eo1));