2. 分析在Java中使用Collectors.toMap时可能导致此异常的情况 在Java中使用Collectors.toMap时,如果流中的元素通过键映射函数(keyMapper)映射到Map的键后,存在多个元素映射到同一个键,而没有提供合并函数(mergeFunction)来处理这种重复键的情况,就会抛出java.lang.IllegalStateException: duplicate key异常。
原因: 使用Map<String, String> RelationMap = relation.stream().collect(Collectors.toMap(s -> s[2], s -> s[1], (oldValue, newValue) -> newValue))) 转换过程中出现重复的Key。导致有多个value程序不知道应该取哪个的问题。 正常案例 老师跟班级之间的关系,每一个老师都负责一个班级。 代码语言:...
Map<Integer, String> map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName,(oldValue, newValue) -> newValue)); 这样就做到了使用新的value替换原有value。 其中Person::getId中::为方法引用 ,Collectors.toMap()源码中第一个参数为Function, Collector<T, ?, Map<K,U>> toM...
Map<String, Person> map2 = list.stream().collect(Collectors.toMap(Person::getName , (p) -> p,(k,v)->v)); 记录一下: //1.针对重复key的 覆盖之前的value list.stream().collect(Collectors.toMap(Person::getName, Person::getSex,(k,v)->v)); //2.value为空,直接存放 不调用map.merge。
这就能证明当出现map的key重复时会报错Duplicate Key的异常了。 如果不想抛异常,自己给传一个新的key值用于替换原有值。 所以, 解决方案一 :给重复的Key设置一个新的值 Map<Integer, String> map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName,(oldValue, newValue) -> newVal...
当进行普通toMap操作时 Map<Long, String> map = userList.stream() .collect(Collectors.toMap(User::getId, User::getUsername); 就会报错,说明处理到已存在的key,其对应value为bbb java.lang.IllegalStateException: Duplicate key bbb at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133...
Java: Java8中stream Collectors.toMap将List转为Map Collectors.toMap将List转为Map 定义 public final class Collectors { public static <T, K, U> Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper) {...
解决方式就在Java8提供的Collectors.toMap() 方法中,其第三个参数就是当出现 duplicate key的时候的处理方案 方案一: 出现重复时,取前面value的值,或者取后面放入的value值,则覆盖先前的value值 Map<Long,String> map = userList.stream() .collect(Collectors.toMap(User::getId, User::getUsername, (v1, v2...
Collectors.toMap(User::getId, User -> User));如果,我们的List中,key值重复,则会出现Duplicate key异常,这时候,我们可以使用覆盖的方式来避免这种异常Map<String, User> userMap = users.stream().collect(Collectors.toMap(User::getId, Function.identity(), (oldVal, newVal) -> newVal));Map中key...
java.lang.IllegalStateException: Duplicate key 20 这个我在公司遇到的一个问题。原因: 使用Map<String, String> RelationMap = relation.stream().collect(Collectors.toMap(s -> s[2], s -> s[1], (oldValue, newValue) -> newValue))) 转换过程中出现重复的Key。导致有多个value程序不知道应该取哪个...