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
こちらもどうぞ