JavaのStreamで重複を除外して重複データを取り出す方法は何ですか?
Javaでは、streamのdistinct()メソッドを使用して重複を削除し、collect()メソッドを使用して結果を新しいコレクションに収集することができます。
例えば、重複要素を含むリストがあるとします。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 2, 3, 4);
重複した要素を取り除き、重複を取り出すためには、以下の手順に従うことができます:
- Listをstreamに変換する:
Stream<Integer> numberStream = numbers.stream();
- distinct()メソッドを使用して重複を削除します。
Stream<Integer> distinctStream = numberStream.distinct();
- collect()メソッドを使用して結果を新しいコレクションに収集する:
List<Integer> distinctNumbers = distinctStream.collect(Collectors.toList());
これにより、distinctNumbersには重複のない要素が含まれています:[1, 2, 3, 4, 5]。
重複する要素を取得したい場合は、filter()メソッドを使用して重複する要素を選択し、それをcollect()メソッドを使用して新しいコレクションに収集することができます。たとえば、重複する要素2、3、4を取得する場合は、以下の手順に従うことができます:
- Listをstreamに変換する:
Stream<Integer> numberStream = numbers.stream();
- 重複した要素をフィルタリングするためにfilter()メソッドを使用します。
Stream<Integer> duplicateStream = numberStream.filter(i -> Collections.frequency(numbers, i) > 1);
- collect()メソッドを使用して結果を新しいコレクションに集約します。
List<Integer> duplicateNumbers = duplicateStream.distinct().collect(Collectors.toList());
このように、duplicateNumbersには重複する要素が含まれています:[2, 3, 4]。