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

Java ストリーム内のすべての最大値を見つけるにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-07 19:06:21432ブラウズ

How to Find All Maximum Values in a Java Stream?

Java ストリーム内のすべての最大値を取得する方法

Java 8 では、ラムダとストリームで max 関数を使用して、データセット内の最大値を識別できます。 。ただし、複数の要素が同じ最大値を持つ場合、max はそのうちの 1 つを任意に選択して返します。

期待される動作:

目標は、すべての要素のリストを取得することです。単一の要素ではなく、最大値を共有する要素

解決策:

API にはこの機能の明示的なメソッドがないため、中間ストレージとコレクション操作を使用してカスタム ソリューションを実装できます。ここでは 2 つのアプローチを示します。

1. 2 パス ソリューション (コレクションの場合):

  • max を使用して最大値を見つけて保存します。
  • 最大値に一致する要素のみを含むようにコレクションをフィルターします。
List<String> list = ... ;

int longest = list.stream()
                  .mapToInt(String::length)
                  .max()
                  .orElse(-1);

List<String> result = list.stream()
                          .filter(s -> s.length() == longest)
                          .collect(toList());

2.シングルパス ソリューション (ストリーム用):

  • ストリーム処理中に現在の最大値を持つすべての要素のリストを維持するカスタム コレクターを使用します。
  • 収集された値を返します。
static <T> Collector<T, ?, List<T>> maxList(Comparator<? super T> comp) {
    // Implementation goes here (provided in the original response)
}

Stream<String> input = ... ;

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

このカスタム コレクターは中間結果を追跡し、各要素に基づいて状態を更新します。現在の最大値と比較した値。このアプローチを活用すると、ストリームまたはコレクションからすべての最大値を含むリストを取得できます。

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

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