Java 8 toMap IllegalStateException Duplicate Key

JavaJava 8Java StreamCollectors

Java Problem Overview


I have a file which contains data in the following format

1
2
3

I want to load this to map as {(1->1), (2->1), (3->1)}

This is the Java 8 code,

Map<Integer, Integer> map1 = Files.lines(Paths.get(inputFile))
                .map(line -> line.trim())
                .map(Integer::valueOf)
                .collect(Collectors.toMap(x -> x, x -> 1));

I am getting the following error

Exception in thread "main" java.lang.IllegalStateException: Duplicate key 1

How do I fix this error?

Java Solutions


Solution 1 - Java

The pramodh's answer is good if you want to map your value to 1. But in case you don't want to always map to a constant, the use of the "merge-function" might help:

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));

The above code is almost the same as posted in the question. But if it encounters a duplicate key, instead of throwing an exception, it will solve it by applying the merge function, by taking the first value.

Solution 2 - Java

The code will run if there are no duplicates in the file.

Map<Integer, Integer> map1 = Files.lines(Paths.get(inputFile))
            .map(String::trim)
            .map(Integer::valueOf)
            .collect(Collectors.toMap(x -> x, x -> 1));

If there are duplicates use the following code to get the total number of occurrences in the file for that key.

Map<Integer, Long> map1 = Files.lines(Paths.get(inputFile))
            .map(String::trim)
            .map(Integer::valueOf)
            .collect(Collectors.groupingBy(x -> x, Collectors.counting());

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionpramodhView Question on Stackoverflow
Solution 1 - JavaKeyMaker00View Answer on Stackoverflow
Solution 2 - JavapramodhView Answer on Stackoverflow