ホームページ >Java >&#&チュートリアル >Java ストリームからすべての最大値を取得するにはどうすればよいですか?

Java ストリームからすべての最大値を取得するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-08 12:37:12555ブラウズ

How Can I Get All Maximum Values from a Java Stream?

Java ストリーム内のすべての値の最大化

問題:
ラムダ式およびストリーム内の Java の max 関数は通常、次の場合に任意の要素を返します。複数の候補が最大値で同点になります。すべての最大値を返すことが望ましい動作である場合、これは望ましくない可能性があります。

解決策:

現時点では、部分的な結果を明示的に収集せずにこの動作を直接実現する方法はありません。コレクションの中で。以下に 2 つの可能なアプローチを示します。

2 パス アプローチ (コレクション):

  1. mapToInt(String::length).max( を使用して最大値を決定します。 ).
  2. 入力ストリームをフィルタリングして、最大値に一致するすべての要素を取得しますlength.

コレクターベースのアプローチ (シングルパス):

  1. maxList メソッドを使用してカスタム コレクターを作成します:

    static <T> Collector<T, ?, List<T>> maxList(Comparator<? super T> comp) {
     // Implementation given in the reference answer
    }
  2. コレクターを使用して、最大値を持つすべての要素を 1 つに収集しますpass.

例:

コレクターベースのアプローチの使用:

Stream<String> input = ... ;

List<String> result = input.collect(maxList(comparing(String::length)));

これは、次の文字列をすべて含むリストを返します。入力ストリームの最大長。

以上がJava ストリームからすべての最大値を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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