Java 8 toMap IllegalStateException 重复键
Java 8 toMap IllegalStateException Duplicate Key
我有一个包含以下格式数据的文件
1
2
3
我想将其加载到映射为 {(1->1), (2->1), (3->1)}
这是Java8码,
Map<Integer, Integer> map1 = Files.lines(Paths.get(inputFile))
.map(line -> line.trim())
.map(Integer::valueOf)
.collect(Collectors.toMap(x -> x, x -> 1));
我收到以下错误
Exception in thread "main" java.lang.IllegalStateException: Duplicate key 1
如何修复此错误?
如果文件中没有重复项,代码将 运行。
Map<Integer, Integer> map1 = Files.lines(Paths.get(inputFile))
.map(String::trim)
.map(Integer::valueOf)
.collect(Collectors.toMap(x -> x, x -> 1));
如果有重复项,请使用以下代码获取该键在文件中出现的总次数。
Map<Integer, Long> map1 = Files.lines(Paths.get(inputFile))
.map(String::trim)
.map(Integer::valueOf)
.collect(Collectors.groupingBy(x -> x, Collectors.counting());
如果你想将你的值映射到 1,pramodh 的答案很好。但是如果你不想总是映射到一个常量,使用 "merge-function" 可能会有所帮助:
Map<Integer, Integer> map1 = Files.lines(Paths.get(inputFile))
.map(line::trim())
.map(Integer::valueOf)
.collect(Collectors.toMap(x -> x, x -> 1, (x1, x2) -> x1));
上面的代码和问题贴的差不多。但是,如果遇到 duplicate key
,它不会抛出异常,而是会 通过应用合并函数 来解决它,方法是取第一个值。
我有一个包含以下格式数据的文件
1
2
3
我想将其加载到映射为 {(1->1), (2->1), (3->1)}
这是Java8码,
Map<Integer, Integer> map1 = Files.lines(Paths.get(inputFile))
.map(line -> line.trim())
.map(Integer::valueOf)
.collect(Collectors.toMap(x -> x, x -> 1));
我收到以下错误
Exception in thread "main" java.lang.IllegalStateException: Duplicate key 1
如何修复此错误?
如果文件中没有重复项,代码将 运行。
Map<Integer, Integer> map1 = Files.lines(Paths.get(inputFile))
.map(String::trim)
.map(Integer::valueOf)
.collect(Collectors.toMap(x -> x, x -> 1));
如果有重复项,请使用以下代码获取该键在文件中出现的总次数。
Map<Integer, Long> map1 = Files.lines(Paths.get(inputFile))
.map(String::trim)
.map(Integer::valueOf)
.collect(Collectors.groupingBy(x -> x, Collectors.counting());
如果你想将你的值映射到 1,pramodh 的答案很好。但是如果你不想总是映射到一个常量,使用 "merge-function" 可能会有所帮助:
Map<Integer, Integer> map1 = Files.lines(Paths.get(inputFile))
.map(line::trim())
.map(Integer::valueOf)
.collect(Collectors.toMap(x -> x, x -> 1, (x1, x2) -> x1));
上面的代码和问题贴的差不多。但是,如果遇到 duplicate key
,它不会抛出异常,而是会 通过应用合并函数 来解决它,方法是取第一个值。