首頁 >Java >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 的lambda 表達式和流中的max 函數通常在以下情況下傳回任意元素:多個候選者並列獲得最大值。當所需的行為是返回所有最大值時,這可能是不可取的。

解決方案:

目前沒有直接方法可以在不顯式收集部分結果的情況下實現此行為在一個集合中。以下是兩種可能的方法:

兩遍方法(集合):

  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. 使用收集器收集a中所有具有最大值的元素單遍。

範例:

使用基於收集器的方法:

Stream<String> input = ... ;

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

這將傳回包含所有字串的清單輸入流中的最大長度。

以上是如何從 Java 流中取得所有最大值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn