ホームページ >Java >&#&チュートリアル >ストリームを使用して特定のプロパティの区別によって Java 8 コレクションをフィルタリングするにはどうすればよいですか?

ストリームを使用して特定のプロパティの区別によって Java 8 コレクションをフィルタリングするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-28 11:15:14944ブラウズ

How Can I Filter a Java 8 Collection by a Specific Property's Distinctness Using Streams?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。