java - 获取 Java 8 流的最小值和最大值的简洁方法

标签 java java-stream

有没有一种简洁的方法可以一次提取流的最小值和最大值(基于某些比较器)?

似乎有很多方法可以单独获取最小值和最大值,或者我可以将流排序到一个临时对象中,例如:

List<T> sorted = Stream.of(...).sorted().collect(Collectors.toList());
T min = sorted.get(0);
T max = sorted.get(sorted.size() - 1);

但这并不简洁,需要分配一个临时对象。我宁愿不分配临时对象或两次通过流。有替代方案吗?

Pair<T> extent = Stream.of(...).???

最佳答案

summarizingInt 收集器在您有一个整数流时效果很好。

IntSummaryStatistics stats = Stream.of(2,4,3,2)
      .collect(Collectors.summarizingInt(Integer::intValue));

int min = stats.getMin();
int max = stats.getMax();

如果你有 double ,你可以使用 summarizingDouble 收集器。

DoubleSummaryStatistics stats2 = Stream.of(2.4, 4.3, 3.3, 2.5)
  .collect(Collectors.summarizingDouble((Double::doubleValue)));

关于java - 获取 Java 8 流的最小值和最大值的简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41816264/

相关文章:

java - KafkaStream.KTable如何以(压缩)KV风格将数据写入kafka主题

java - 在列表列表中找到最小大小的列表

java - 如何在primeng p-fileupload组件中过滤文件类型

Java Swing : How to make the JComboxBox drop down list taller?

java - Maven依赖冲突解决

java - java中字符串错误地转换为十六进制

java - 将 java Stream 转换为 Set

java - 合并两个流

java - 将 IntStream.iterate 限制为特定值

java - 我们可以在 Java 8 中使用流来合并这三个嵌套的 for 循环吗?