首页 > Java > java教程 > 如何查找 Java 流中的所有最大值?

如何查找 Java 流中的所有最大值?

Barbara Streisand
发布: 2024-12-07 19:06:21
原创
430 人浏览过

How to Find All Maximum Values in a Java Stream?

如何检索 Java 流中的所有最大值

在 Java 8 中,可以在 lambda 和流上使用 max 函数来识别数据集中的最大值。但是,当多个元素具有相同的最大值时,max 会任意选择并返回其中一个。

预期行为:

目标是检索所有元素的列表共享最大值的元素,而不仅仅是单个元素

解决方案:

由于 API 缺少此功能的显式方法,因此您可以使用中间存储和集合操作来实现自定义解决方案。这里有两种方法:

1。两遍解决方案(对于集合):

  • 使用 max 查找最大值并存储它。
  • 过滤集合以仅包含与最大值匹配的元素。
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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板