如何通过Collectors.toMap()方法初始化Java的Map<String, String[]>对象
正确实现Collectors.toMap初始化Map<String, String[]>
你的代码语法错误出在data -> [data[1]]部分,Java不支持这种简化的数组创建方式,必须显式使用new String[]{元素}的语法来创建数组。
基础正确版本
如果确定流中不存在重复的key,直接修改数组创建逻辑即可:
Map<String, String[]> map = Stream.of( new String[][]{{"Hello", "World"}, {"John", "Doe"}} ).collect(Collectors.toMap( data -> data[0], data -> new String[]{data[1]} ));
处理重复key的场景
如果流中可能出现相同key的元组,默认的Collectors.toMap会抛出IllegalStateException,此时可以添加第三个参数处理冲突:
- 保留原有值,忽略新值:
Map<String, String[]> map = Stream.of( new String[][]{{"Hello", "World"}, {"Hello", "Java"}, {"John", "Doe"}} ).collect(Collectors.toMap( data -> data[0], data -> new String[]{data[1]}, (existingArr, newArr) -> existingArr ));
- 合并新旧数组:
Map<String, String[]> map = Stream.of( new String[][]{{"Hello", "World"}, {"Hello", "Java"}, {"John", "Doe"}} ).collect(Collectors.toMap( data -> data[0], data -> new String[]{data[1]}, (existingArr, newArr) -> { String[] merged = new String[existingArr.length + newArr.length]; System.arraycopy(existingArr, 0, merged, 0, existingArr.length); System.arraycopy(newArr, 0, merged, existingArr.length, newArr.length); return merged; } ));
内容的提问来源于stack exchange,提问作者halloleo
相关产品推荐
相关产品推荐

