在 Java 8 中,可以在 lambda 和流上使用 max 函數來識別資料集中的最大值。但是,當多個元素具有相同的最大值時,max 會任意選擇並傳回其中一個。
預期行為:
目標是檢索所有元素的列表共享最大值的元素,而不僅僅是單個元素
解決方案:
由於API缺少此功能的明確方法,因此您可以使用中間儲存和集合操作來實作自訂解決方案。這裡有兩種方法:
1。兩遍解決方案(對於集合):
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中文網其他相關文章!