当前位置: 首页 > 知识库问答 >
问题:

Java lambda:重复键映射上的catch异常

徐昆
2023-03-14
   Map<Person, Long> personToSalaray = getMappings();

   // lastname to salary
   Map<String, Long> personToSalary.entrySet().stream()
            .collect(toMap(
                    e -> e.getKey().getLastname(),
                    e -> e.getValue()));

当这起作用时,它可能会引发重复键插入(相同的lastname)的异常。怎么抓?我不能在Tomap中声明try-catch。

共有1个答案

蒙胤
2023-03-14

根据collectors.map()的Javadocs:

如果映射的键包含重复项(根据Object.equals(Object)),则在执行收集操作时引发IllegalStateException。如果映射的键可能有重复项,请改用tomap(Function,Function,BinaryOperator)

因此,解决方案不应该捕获异常,而应该使用专门为处理重复项而设计的其他tomap重载。该方法的文档给出了一个与您的场景非常接近的示例

Map<String, String> phoneBook
     people.stream().collect(toMap(Person::getName,
                                   Person::getAddress,
                                   (s, a) -> s + ", " + a));
 类似资料:
  • 问题内容: 特定实体存在映射例外。不能弄清楚问题出在哪里。我从头到尾检查了所有映射3次。我仍然收到映射异常。 发送给员工的电子邮件仅映射一次。但它仍然报告错误重复映射 错误是: 电子邮件Pojo email.hbm.xml 相关脚本 发送给员工的电子邮件仅映射一次。但它仍然报告错误重复映射 问题答案: 您是否将Employee中的集合设置为逆?

  • 问题内容: 我正在创建一个需要存储键值对的程序。该程序需要接受键形式的请求,并返回相应的值。 问题在于每个键有时有多个值,并且map类不允许重复的键。 这些值是数字,因此无法像使用字符串那样有意义地连接这些值。 对于每个键可以有多个数值的事实,是否有任何优雅的解释方法?我希望返回每个数字,而不是随机返回一个数字。 问题答案: $ cat YourMap.java public class Your

  • 我有多个数组映射。 我想从多个地图中获取重复地图键的列表。 例如 除了遍历所有地图键,检查集合是否包含键,如果不将键添加到集合中,我想不出任何更干净的方法。有没有办法通过streams来实现这一点?

  • 我有两张阵列图。 有没有办法用流来完成这个任务? 或者我必须通过映射迭代?

  • 我可以有一个哈希图在Java看起来像这样吗? 我的问题和这里的类似问题 我是Java新手。所以我想知道的是,如果我需要上面这样的东西,如果它无效,什么是最好的数据结构?

  • 想改进这个问题吗?通过编辑这篇文章添加细节并澄清问题。 我所拥有的是, 我想要的是, 其中,