問題:
Java 的lambda 表達式和流中的max 函數通常在以下情況下傳回任意元素:多個候選者並列獲得最大值。當所需的行為是返回所有最大值時,這可能是不可取的。
解決方案:
目前沒有直接方法可以在不顯式收集部分結果的情況下實現此行為在一個集合中。以下是兩種可能的方法:
兩遍方法(集合):
基於收集器的方法(單通道):
使用maxList 方法建立自訂收集器:
static <T> Collector<T, ?, List<T>> maxList(Comparator<? super T> comp) { // Implementation given in the reference answer }
範例:
使用基於收集器的方法:
Stream<String> input = ... ; List<String> result = input.collect(maxList(comparing(String::length)));
這將傳回包含所有字串的清單輸入流中的最大長度。
以上是如何從 Java 流中取得所有最大值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!