当前位置: 首页 > 知识库问答 >
问题:

从单个Java流中提取多个值

刁星渊
2023-03-14

我必须提取两个值(最小

public class MyClass {

    public static class MyC {
        double val;
        public MyC(double val) {
            this.val = val;
        }

        public double getVal() {return val;}
    }

    public static void main(String[] args) {


        List<MyC> list = new ArrayList<>();
        list.add(new MyC(10.0d));
        list.add(new MyC(20.0d));

        double min = Optional.ofNullable(list).stream()
                        .flatMap(List::stream)
                        .limit(13)
                        .map(MyC::getVal)
                        .min(Double::compare)
                        .orElse(getMinDefault());

        double max = Optional.ofNullable(list).stream()
                .flatMap(List::stream)
                .limit(13)
                .map(MyC::getVal)
                .max(Double::compare)
                .orElse(getMaxDefault());

    }

    private static double getMinDefault() {
        return 1.0d;
    }

    private static double getMaxDefault() {
        return 20.0d;
    }
}

共有1个答案

南宫浩皛
2023-03-14

您可以对value属性的最大值和最小值使用DoubleSummaryStatistics。

DoubleSummaryStatistics summaryStatistics = list // avoid initialising list as 'null'
        .stream()
        .limit(13)
        .mapToDouble(MyC::getVal)
        .summaryStatistics();
double max = summaryStatistics.getMax();
double min = summaryStatistics.getMin();

关于要依赖的自定义默认值,可以使用条件逻辑,例如:

double max = getMaxDefault();
double min = getMinDefault();
if (!list.isEmpty()) {
    DoubleSummaryStatistics summaryStatistics = list
            .stream()
            .limit(13)
            .mapToDouble(MyC::getVal)
            .summaryStatistics();

    max = summaryStatistics.getMax();
    min = summaryStatistics.getMin();
}
 类似资料:
  • 问题内容: 我想确定显示点集合所需的最小面积。最简单的方法是像这样遍历整个集合: 我开始了解流。为此,您可以执行以下操作: 两者给出相同的结果。但是,尽管流方法很优雅,但速度却慢得多(如预期的那样)。 有没有办法让,,并在一个单一的流操作? 问题答案: 与类推,创建一个收集所需信息的类。它定义了两种方法:一种用于记录a的值,一种用于组合两个的值。 然后,您可以将收集到中。 更新 我完全对 OP得出

  • 我想在同一个Java过程中使用KCL处理多个Kinesis流。 想法很简单:为每个流创建一个新的KCL实例,然后并发运行worker。 我的问题是,在这种情况下,所有KCL实例是否都使用相同的线程池,以及在处理流处理时,这种想法是否是一种好的/常见的做法。 非常感谢。

  • 在一次ffmpeg调用中提取两个帧(比两次单独调用更快),或 每次调用为ffmpeg提供多个文件(以减少进程启动开销)

  • 问题内容: 首先,我将自由地让自己成为一个笨拙的文科专家,他完全可以自学此脚本。就是说,我正在尝试使用以下代码从USGS水数据服务获取值: 尽管我找到了一些有关如何从JSON响应中提取所需值的教程,但大多数教程都非常简单。我遇到的困难是从该服务返回的看起来非常复杂的响应中提取出来的。查看响应,我可以看到我想要的是来自两个不同部分的值和一个时间值。因此,我可以查看响应并查看所需的内容,但我一生无法解

  • 问题内容: 到目前为止,我们有一个项目结构,其中包含名为的单个源文件夹,其中包含三个模块的源代码。我想做的是: 1)编译源代码。这可以通过sourceSets定义轻松完成: 2)将编译结果放入三个jar中。我通过三个“ jar”类型的任务来做到这一点: 我现在通过三个单独的任务来执行此操作: util.jar } client.jar } server.jar } 问题是应该包含and 中不包含的

  • 我已经创建了一个应用程序,它将从tar存档中提取单个文件。该应用程序正确读取*.tar,但是当我尝试提取文件时,该应用程序只是使用正确的文件名创建新文件...文件为空 (0kb)。所以。。。我可能只是创建新文件而不是提取... 在这一点上,我完全是个初学者...