ホームページ >Java >&#&チュートリアル >ストリームを使用して特定のプロパティの区別によって Java 8 コレクションをフィルタリングするにはどうすればよいですか?
Java 8: プロパティの Distinctness に基づいた Stream API によるコレクションのフィルタリング
Java 8 では、通常、distinct() メソッドを使用して削除します。ストリームから要素を複製します。ただし、デフォルトでは、デフォルトの等価性チェックに従ってオブジェクトが等しい場合、オブジェクトは等しいと見なされます。特定のプロパティに基づいて区別性を決定する必要がある場合には、より洗練されたアプローチが必要です。
Person クラスを変更しない 1 つの解決策は、distinctByKey() メソッドを使用することです。これは次のように実装できます。
public static <T> Predicate<T> distinctByKey(Function<T, ?> keyExtractor) { Set<Object> seen = ConcurrentHashMap.newKeySet(); return t -> seen.add(keyExtractor.apply(t)); }
このメソッドを使用して Person オブジェクトのコレクションを名前でフィルターするには、次のように記述できます。
persons.stream().filter(distinctByKey(Person::getName))
このアプローチはステートフル フィルターを使用して以前に確認されたキー値を追跡し、最初に出現した一意の名前のみが保持されるようにします。並列処理の場合、デフォルトのdistinct()メソッドとは異なり、distinctByKey()メソッドは個別の要素の順序を保証しない可能性があることに注意することが重要です。
以上がストリームを使用して特定のプロパティの区別によって Java 8 コレクションをフィルタリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。