如何用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);
这是我的单子
但我有个错误
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)
您可以使用collectors.tomap
的重载版本,它从Java文档中获取第三个参数mergefunction
:
如果映射的键包含重复项(根据Object.equals(对象)),则将值映射函数应用于每个equal元素,并使用提供的合并函数合并结果。
Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction)
如果存在重复键,BinaryOperator的第三个参数解析合并错误:
Map<Object, Object> peronMap = person.stream().limit(5)
.collect(Collectors.toMap(Person::getName,
Person::getAge,
(age1, age2) -> age2));
在我的示例代码中,如果有两个具有相同名称的键,它将取第二个值。
如果数据是:新人(“Charles”,“Dickens”,60)
和新人(“Charles”,“Dickens”,61),
密钥是相同的Charles
但是如果您使用我的代码,61
的第二个值将被考虑,而60
的第一个值将在最终的映射
中被丢弃。
我正试图找出处理异常的最具Python风格的方法。假设我们有一个长方法,它可以完成多个注册汽车的任务 例如 检索汽车详细信息 计算税款 发送确认电子邮件 调用方法是否应该处理异常: 或者单个方法本身是否应该处理异常。如果在这个方法中有任何异常,我们只想记录下来(或者在这个例子中打印出来)并继续。 是一种方法比另一种方法更pythonic,还是归结为更具可读性?我更喜欢第二种方式,但我们似乎更频繁地
我有metohod myservice#create,它抛出CustomException。我在可选#map中调用此方法,如下所示: 当我用引起异常的参数调用这个方法时,就会捕获CustomException,但结果是操作成功,状态为200。如何在lambda中处理此异常并返回异常消息?
这是链接中问题的继续:我正在学习java中的异常处理(基本上是在继承中),子类方法必须抛出异常,该异常是父类方法的子类。 “当子类重写超类中的方法时,子类方法定义只能在父类方法(或重写方法)的throws子句中指定异常类的所有或子集” 这是一条规则。但我不知道制定这条规则的原因是什么,为什么不允许反之亦然。为什么要创建此规则
我有一个抛出检查异常的方法: 我正在尝试创建一个通用包装器,它将优雅地处理异常。 现在我正在使用,它给我编译时错误。我可能错过了什么?
我最近在我的Spring4/Hibernate Web应用程序中实现了Spring Security来处理登录/退出和不同的用户角色。 经过大量阅读,它现在似乎工作得很好,但我注意到,由于错误的Spring Security配置而引发的异常没有使用我的自定义处理程序进行优雅的处理,而是显示为一个丑陋的Tomcat错误页面(显示HTTP状态500-UserDetailsService是必需的,后跟一
假设您有一个第三方库,它公开了下一个接口。 代码无法编译,因为Function不知道如何处理由domap声明的CheckedException。我想出了两个可能的解决方案。 解决方案#1-包装调用 解决方案#2-编写实用程序方法