我有一个文件,其中包含以下格式的数据
1
2
3
Run Code Online (Sandbox Code Playgroud)
我想加载它来映射为 {(1->1), (2->1), (3->1)}
这是Java 8代码,
Map<Integer, Integer> map1 = Files.lines(Paths.get(inputFile))
.map(line -> line.trim())
.map(Integer::valueOf)
.collect(Collectors.toMap(x -> x, x -> 1));
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Exception in thread "main" java.lang.IllegalStateException: Duplicate key 1
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个错误?
Key*_*r00 25
如果你想将你的值映射到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));
Run Code Online (Sandbox Code Playgroud)
上面的代码与问题中的帖子几乎相同.但是如果它遇到a duplicate key,而不是抛出异常,它将通过应用合并函数,通过获取第一个值来解决它.
pra*_*odh 22
如果文件中没有重复项,代码将运行.
Map<Integer, Integer> map1 = Files.lines(Paths.get(inputFile))
.map(String::trim)
.map(Integer::valueOf)
.collect(Collectors.toMap(x -> x, x -> 1));
Run Code Online (Sandbox Code Playgroud)
如果存在重复项,请使用以下代码获取该项文件中出现的总次数.
Map<Integer, Long> map1 = Files.lines(Paths.get(inputFile))
.map(String::trim)
.map(Integer::valueOf)
.collect(Collectors.groupingBy(x -> x, Collectors.counting());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40502 次 |
| 最近记录: |