ホームページ >Java >&#&チュートリアル >Java ストリーム内のすべての最大値を見つけるにはどうすればよいですか?
Java 8 では、ラムダとストリームで max 関数を使用して、データセット内の最大値を識別できます。 。ただし、複数の要素が同じ最大値を持つ場合、max はそのうちの 1 つを任意に選択して返します。
期待される動作:
目標は、すべての要素のリストを取得することです。単一の要素ではなく、最大値を共有する要素
解決策:
API にはこの機能の明示的なメソッドがないため、中間ストレージとコレクション操作を使用してカスタム ソリューションを実装できます。ここでは 2 つのアプローチを示します。
1. 2 パス ソリューション (コレクションの場合):
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 サイトの他の関連記事を参照してください。