首頁 >Java >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 中,可以在 lambda 和流上使用 max 函數來識別資料集中的最大值。但是,當多個元素具有相同的最大值時,max 會任意選擇並傳回其中一個。

預期行為:

目標是檢索所有元素的列表共享最大值的元素,而不僅僅是單個元素

解決方案:

由於API缺少此功能的明確方法,因此您可以使用中間儲存和集合操作來實作自訂解決方案。這裡有兩種方法:

1。兩遍解決方案(對於集合):

  • 使用 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中文網其他相關文章!

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