【问题标题】:Duplicate Key Illegal state Exception from Collectors.map [duplicate]来自 Collectors.map 的重复键非法状态异常 [重复]
【发布时间】:2020-04-29 19:54:14
【问题描述】:

代码如下。我看到 Duplicate key ,非法状态异常。

List<User> allusers = Helper.getAllUsers(someKey);
Map<String, User> allusersMap = allusers.stream()
.collect(Collectors.toMap(originalUser-> originalUser.getName(),
originalUser-> originalUser));

【问题讨论】:

  • toMap() 接受 3 个参数,第三个参数是 BinaryOperator ,它可以帮助您忽略重复项。 (a,b)-&gt;a 会解决你的问题。

标签: java java-8


【解决方案1】:

Java docs on toMap 解释得很清楚:

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

因此,您的数据有多个同名用户,toMap 正在按预期工作。 rtm 总是好的 :-)

【讨论】:

  • 使用BinaryOperator List解决 allusers = Helper.getAllUsers(someKey); Map allusersMap = allusers.stream() .collect(Collectors.toMap(originalUser-> originalUser.getName(), originalUser-> originalUser,(userObj1, userObj2) -> userObj1));
猜你喜欢
  • 2023-03-23
  • 2018-06-15
  • 1970-01-01
  • 2018-01-15
  • 2015-08-04
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
相关资源
最近更新 更多