首页 >Java >java教程 >如何使用'max”函数从 Java 流返回所有最大值?

如何使用'max”函数从 Java 流返回所有最大值?

Linda Hamilton
Linda Hamilton原创
2024-12-13 12:24:11888浏览

How to Return All Maximum Values from a Java Stream Using the `max` Function?

在 Java 流中使用 Max 函数返回所有最大值

在 Java 8 的 lambda 流中使用 max 函数时,在场景中可能会出现差异其中多个对象产生相同的最大值。该函数输出任意代表,而不评估或考虑所有可行的候选者。

为了解决此限制,需要一种替代方法来准确检索所有最大值。不幸的是,没有一种简单的方法,需要利用集合来保存部分结果。

两遍解决方案

对于存储在集合中的输入(List list),可以采用两阶段过程:

  1. 确定最长字符串的长度(例如,int Longest = list.stream().mapToInt(String::length).max().orElse(-1);)。
  2. 过滤列表以提取具有最大长度的所有字符串(例如,List result = list.stream().filter(s -> s.length() ==最长).collect(toList());).

单通道解决方案(流)

要使用流解决单通道场景,可以根据提供的比较器构建自定义收集器:

static <T> Collector<T, ?, List<T>> maxList(Comparator<? super T> comp) {
    return Collector.of(
        ArrayList::new,
        (list, t) -> {
            int c;
            if (list.isEmpty() || (c = comp.compare(t, list.get(0))) == 0) {
                list.add(t);
            } else if (c > 0) {
                list.clear();
                list.add(t);
            }
        },
        (list1, list2) -> {
            // Processing for list merging logic
        }
    );
}

要在流中使用此收集器,只需调用收集:

Stream<String> input = ... ;
List<String> result = input.collect(maxList(comparing(String::length)));

以上是如何使用'max”函数从 Java 流返回所有最大值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn