首页 >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