Java 8 使用Lamda在映射中复制时如何处理异常
使用Lamda在映射中复制时如何处理异常Java 8 使用Lamda在映射中复制时如何处理异常,java-8,Java 8,使用Lamda在映射中复制时如何处理异常 List<Person> person = Arrays.asList( new Person("Charles","Dickens",60), new Person("Dickens","Charles",60), new Person("Lewis","Charles",60), new Person("Char
List<Person> person = Arrays.asList(
new Person("Charles","Dickens",60),
new Person("Dickens","Charles",60),
new Person("Lewis","Charles",60),
new Person("Charles","Dickens",60),
new Person("abc","abc",20));;
//applying toMap to collect
Map<Object, Object> peronMap = person.stream().limit(5)
.collect(Collectors.toMap(Person::getName,Person::getAge));
System.out.println(peronMap);
您可以使用重载版本的
Collectors.toMap
,它从以下位置获取第三个参数mergeFunction
:
如果映射的关键帧包含重复项(根据
equals(Object)),值映射函数应用于每个
元素,并使用提供的合并方法合并结果
功能
Collector toMap(函数能否请您详细说明“Person::getName,Person::getAge,(p1,p2)->p2)”@shiv添加了一些解释
Exception in thread "main" java.lang.IllegalStateException: Duplicate key 60
at java.util.stream.Collectors.lambda$throwingMerger$0(Unknown Source)
at java.util.HashMap.merge(Unknown Source)
at java.util.stream.Collectors.lambda$toMap$58(Unknown Source)
at java.util.stream.ReduceOps$3ReducingSink.accept(Unknown Source)
at java.util.stream.SliceOps$1$1.accept(Unknown Source)
at java.util.Spliterators$ArraySpliterator.tryAdvance(Unknown Source)
at java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source)
Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction)
Map<Object, Object> peronMap = person.stream().limit(5)
.collect(Collectors.toMap(Person::getName,
Person::getAge,
(age1, age2) -> age2));