Java 8 使用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

使用Lamda在映射中复制时如何处理异常

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));