yucatio@システムエンジニア

趣味で作ったものいろいろ

Javaでリストの重複しているインデックスを取得する(ストリームAPI使用)

Javaで、リスト内で重複している要素の、インデックスをグルーピングして取得します。ストリームAPIを使用すると簡単に書けます。

List<String> list = List.of("A", "B", "C", "B", "B", "D", "A");
Map<String, List<Integer>> indexGroup = IntStream.range(0, list.size())
    .boxed()
    .collect(Collectors.groupingBy(list::get));
    
indexGroup.forEach((k, v) -> System.out.println(k + ":" + v));
// A:[0, 6]
// B:[1, 3, 4]
// C:[2]
// D:[5]

重複しているインデックスを取得する

単に、重複しているインデックスがほしい場合はこちら。

List<String> list = List.of("A", "B", "C", "B", "B", "D", "A");

Map<String, Long> countMap = list.stream().collect(
    Collectors.groupingBy(
        Function.identity(),
        Collectors.counting()));

List<Integer> duplicatedList = IntStream.range(0, list.size())
    .filter(i -> countMap.get(list.get(i)) > 1)
    .boxed()
    .collect(Collectors.toList());

duplicatedList.forEach(System.out::println);
// 0
// 1
// 3
// 4
// 6

こちらもどうぞ

yucatio.hatenablog.com