1. ホーム
  2. java

[解決済み] Java 8 toMap IllegalStateException Duplicate Key

2022-02-05 05:15:45

質問

次のような形式のデータを含むファイルがあります。

1
2
3

としてマップにロードしたい。 {(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));

次のようなエラーが発生します。

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