ホームページ > Java > &#&チュートリアル > `max` 関数を使用して Java ストリームからすべての最大値を返す方法

`max` 関数を使用して Java ストリームからすべての最大値を返す方法

Linda Hamilton
リリース: 2024-12-13 12:24:11
オリジナル
889 人が閲覧しました

How to Return All Maximum Values from a Java Stream Using the `max` Function?

Java ストリームで Max 関数を使用してすべての最大値を返す

Java 8 のラムダ ストリームで max 関数を利用すると、シナリオに矛盾が生じる可能性がありますここで、複数のオブジェクトは同じ最大値を生成します。この関数は、すべての実行可能な候補を評価または考慮することなく、任意の代表値を出力します。

この制限に対処するには、すべての最大値を正確に取得するための代替方法が必要です。残念ながら、単純なアプローチは利用できず、部分的な結果を保持するにはコレクションを使用する必要があります。

2 パス ソリューション

コレクションに保存された入力の場合 (List<文字列>リスト)、2 段階のプロセスを使用できます:

  1. 最長の文字列の長さを確認します。 (例: int longest = list.stream().mapToInt(String::length).max().orElse(-1);).
  2. リストをフィルタリングして、最大長 (例: List result = list.stream().filter(s -> s.length() == longest).collect(toList());).

    シングルパス ソリューション (ストリーム)

    ストリームを使用したシングルパス シナリオに取り組むには、カスタム コレクターは、提供された Comparator に基づいて構築できます。

    static <T> Collector<T, ?, List<T>> maxList(Comparator<? super T> comp) {
        return Collector.of(
            ArrayList::new,
            (list, t) -> {
                int c;
                if (list.isEmpty() || (c = comp.compare(t, list.get(0))) == 0) {
                    list.add(t);
                } else if (c > 0) {
                    list.clear();
                    list.add(t);
                }
            },
            (list1, list2) -> {
                // Processing for list merging logic
            }
        );
    }
    ログイン後にコピー

    ストリームでこのコレクターを利用するには、次のようにします。収集を呼び出します:

    Stream<String> input = ... ;
    List<String> result = input.collect(maxList(comparing(String::length)));
    ログイン後にコピー

    以上が`max` 関数を使用して Java ストリームからすべての最大値を返す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート