问题:
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中文网其他相关文章!