Java 8 Stream API 中的多个聚合函数

2024-03-10

我有一个类定义如下

public class TimePeriodCalc {
    private double occupancy;
    private double efficiency;
    private String atDate;
}

我想使用 Java 8 Stream API 执行以下 SQL 语句。

SELECT atDate, AVG(occupancy), AVG(efficiency)
FROM TimePeriodCalc
GROUP BY atDate

我试过 :

Collection<TimePeriodCalc> collector = result.stream().collect(groupingBy(p -> p.getAtDate(), ....

可以在代码中输入什么来选择多个属性?我正在考虑使用多个收集器,但真的不知道该怎么做。


无需定制即可完成Collector(不再对结果进行流式传输),你可以这样做。它有点脏,因为它首先收集到Map<String, List<TimePeriodCalc>>然后流式传输该列表并获得平均双倍。

由于您需要两个平均值,因此它们被收集到Holder or a Pair,在这种情况下我使用AbstractMap.SimpleEntry

  Map<String, SimpleEntry<Double, Double>> map = Stream.of(new TimePeriodCalc(12d, 10d, "A"), new TimePeriodCalc(2d, 16d, "A"))
            .collect(Collectors.groupingBy(TimePeriodCalc::getAtDate,
                    Collectors.collectingAndThen(Collectors.toList(), list -> {
                        double occupancy = list.stream().collect(
                                Collectors.averagingDouble(TimePeriodCalc::getOccupancy));
                        double efficiency = list.stream().collect(
                                Collectors.averagingDouble(TimePeriodCalc::getEfficiency));
                        return new AbstractMap.SimpleEntry<>(occupancy, efficiency);
                    })));

    System.out.println(map);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 8 Stream API 中的多个聚合函数 的相关文章

  • Jackson JSON + Java 泛型

    我正在尝试将以下 JSON 反序列化 映射到List
  • Android:如何暂停和恢复可运行线程?

    我正在使用 postDelayed 可运行线程 当我按下按钮时 我需要暂停并恢复该线程 请任何人帮助我 这是我的主题 protected void animation music6 music4 postDelayed new Runnab
  • “源兼容性”和“目标兼容性”有什么区别?

    之间有什么关系 区别sourceCompatibility and targetCompatibility 当它们设置为不同的值时会发生什么 根据工具链和兼容性 https docs gradle org current userguide
  • java程序有多少种结束方式?

    我知道使用 System exit 0 可以结束一个java程序 例如 如果我有一个JFrame窗口 它会关闭并结束程序 但我想知道还有多少其他方法 可以关闭它并结束程序 包括发生错误时 程序会被关闭 JFrame也会被关闭吗 添加到其他答
  • 非易失性领域的出版与阅读

    public class Factory private Singleton instance public Singleton getInstance Singleton res instance if res null synchron
  • 有人用过 ServiceLoader 和 Guice 一起使用吗?

    我一直想通过我们的应用程序 构建系统进行更大规模的尝试 但更高的优先级不断将其推到次要地位 这似乎是加载 Guice 模块的好方法 并且避免了关于 硬编码配置 的常见抱怨 单个配置属性很少会自行更改 但您几乎总是会有一组配置文件 通常用于不
  • 什么是内部类的合成反向引用

    我正在寻找应用程序中的内存泄漏 我正在使用的探查器告诉我寻找这些类型的引用 但我不知道我在寻找什么 有人可以解释一下吗 Thanks Elliott 您可以对 OUTER 类进行合成反向引用 但不能对内部类实例进行合成 e g class
  • 自定义列表字段点击事件

    我正在编写一个应用程序 其中我创建了用于显示列表视图的自定义列表字段 我的 CustomListField 包含连续的一个图像和文本 我正在通过单击列表字段行获取字段更改侦听器 但我也想将字段更改侦听器放在图像上 谁能告诉我我该怎么做 这是
  • 为什么用scala写的代码比用java写的慢6倍?

    我不确定我在编写 scala 代码时是否犯了一些错误 问题是 The four adjacent digits in the 1000 digit number that have the greatest product are 9 9
  • 在 Spring 中为 @Pathvariable 添加类级别验证

    在发布这个问题之前 我已经做了很多研究并尝试了很多可用的解决方案 这是我陷入的棘手情况 我有一个 Spring 控制器 它有多个请求映射 它们都有 PathVariables 控制器如下所示 Controller EnableWebMvc
  • Mockito 和 Hamcrest:如何验证 Collection 参数的调用?

    我遇到了 Mockito 和 Hamcrest 的泛型问题 请假设以下界面 public interface Service void perform Collection
  • 为什么在将 String 与 null 进行比较时会出现 NullPointerException?

    我的代码在以下行中出现空指针异常 if stringVariable equals null 在此语句之前 我声明了 stringVariable 并将其设置为数据库字段 在这个声明中 我试图检测该字段是否有null值 但不幸的是它坏了 有
  • 如何在 IntelliJ IDEA 中运行 akka actor

    来自 Akka 网站文档 然后 这个主要方法将创建所需的基础设施 运行演员 启动给定的主要演员并安排 一旦主要参与者终止 整个应用程序就会关闭 因此 您将能够使用类似于以下的命令运行上面的代码 下列的 java classpath akka
  • IntelliJ Idea:将简单的 Java servlet(无 JSP)部署到 Tomcat 7

    我尝试按照教程进行操作here http wiki jetbrains net intellij Creating a simple Web application and deploying it to Tomcat部署 servlet
  • Lombok 不适用于 Eclipse Neon

    我下载了lombok jar lombok 1 16 14 jar 并将其放入我的下载中 然后我点击这个 jar 执行正确地识别了我的 MacOS 上的 Eclipse 实例 然后我选择了我想要的实例 Lombok也在pom xml中指定
  • Azure Java SDK:ServiceException:ForbiddenError:

    尝试了基本位置检索器代码 如下所示 String uri https management core windows net String subscriptionId XXXXXXXX 5fad XXXXXX 9dfa XXXXXX St
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • Selenium 单击在 Internet Explorer 11 上不起作用

    我尝试在 Internet Explorer 上单击 selenium 但它不起作用 我努力了element click moveToElement element click build perform javascript没事了 事实上
  • 在会话即将到期之前调用方法

    我的网络应用程序有登录的用户 有一个超时 在会话过期之前 我想执行一个方法来清理一些锁 我已经实现了sessionListener但一旦我到达public void sessionDestroyed HttpSessionEvent eve
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ

随机推荐

  • 使用网络音频 API 检查所选麦克风是否静音

    通过使用以下内容 我们可以提示用户在音频和视频源限制下选择他们喜欢的媒体输入设备 目前仅对 Chrome 支持感兴趣 navigator mediaDevices getUserMedia audio true then stream gt
  • 浮点序列化,字典序比较==浮点比较

    我正在寻找一种序列化浮点的方法 以便在序列化形式中 字典比较与浮点比较相同 我认为可以通过以下形式存储它 signed bit 1 for positive exponent significand 指数和有效数将被序列化为大尾数 而补码将
  • Facebook 登录可以在 localhost 中使用,但不能在 webhost 中使用

    我有一个类如下 public class FacebookScopedClient IAuthenticationClient private string appId private string appSecret private st
  • 如何检查本地文件是否是tfs中的最新版本?

    我希望能够询问 TfsTeamProjectCollection 并确定服务器上是否有更新版本的文件 我希望能够在不实际获取文件的情况下执行此操作 这在某个地方可能吗 我已经做了一些摸索 到目前为止还绘制了空白 Thanks 最简单的方法是
  • 查询 influxdb 的日期

    我在 influxdb 中有一个表 其中有一列名为 expirydate 在专栏中我有一些日期 例如 2016 07 14 或 2016 08 20 我只想选择 2016 07 14 日期 但我不确定如何 目前我的查询是 SELECT FR
  • 如何对 Matrix 包中“sparseMatrix”类的对象进行 QR 分解?

    我想用 QR 分解Matrix qr 我用它创建的矩阵上的函数B lt as A sparseMatrix 我知道我可以得到 R 矩阵Matrix qr R 不过 我还需要 Q 矩阵 Matrix包中似乎没有qr Q 函数 如何获得 Q 矩
  • 从 pandas 数据框到元组(对于半正矢模块)

    我有一个熊猫数据框my df包含以下列 id lat1 lon1 lat2 lon2 1 45 0 41 3 2 40 1 42 4 3 42 2 37 1 基本上 我想做以下事情 import haversine haversine ha
  • 缩放和平移 - 将 d3 代码升级到 d3.v4

    我一直在尝试将此代码升级到 d3 的 v4 但没有成功 function xnr selector var coordinates id 1 x 120 16353869437225 y 160 974180892502466 id 2 x
  • 这在 C# 或 LINQ 中意味着什么? - ( () => )

    我正在阅读 Jeffrey Palermo 的书并遇到了这种语法 private void InitializeRepositories Func
  • 使用 XPATH 在具有命名空间的 XML 中选择节点时出现问题

    我有以下 XPATH 行 det nItem 1 prod cProd 使用以下命令成功选择所需的节点XPath 可视化工具 http xpathvisualizer codeplex com 它会自动识别命名空间 您可以定义要选择的命名空
  • Eclipse 在哪里存储有关启动哪个工作区的信息?

    当我启动 Eclipse 时 它 会从我创建的工作区之一开始 并选择 不再询问 通常 Eclipse 会在启动过程中询问从哪个工作区开始 因此它必须存储要使用的工作空间 它在哪里存储这条信息 In HOME eclipse org ecli
  • VB在特定记录上打开表单

    我正在使用 Microsoft Access 我想在单击按钮时打开特定 ID 的表单 我可以在 Do open 表单命令中指定 id 吗 下面的代码打开一个表单 但随后打开一个对话框 要求输入 id 有人有什么想法吗 Private Sub
  • SwiftUI 问题将变量传递到另一个视图

    我想将浮点变量从一个视图传递到另一个新视图 在下面的代码中 有一个名为 mhzValue 的浮点值 它是通过滑块设置的 滑块更改该值 然后文本显示在视图中 当用户点击导航按钮显示新视图时 我希望能够获取 mhzValue 并将其显示在文本框
  • 在 CosmosDb 中使用 BulkExecutor 时出现无效索引异常

    当我尝试使用 BulkExecutor 更新 CosmosDb 中的属性之一时出现错误 错误消息是 索引超出范围 必须为非负数且小于集合的大小 参数名称 索引 重要的一点 我没有在我的集合上定义分区键 这是我的代码 SetUpdateOpe
  • 将插件插入流体模板?

    扩展名客搜索 https typo3 org extensions repository view ke search有一个搜索字段插件 我想将其插入到我的流体模板中并显示在每个页面上 我对此很陌生 不知道如何开始 任何帮助表示赞赏 您可以
  • 如何覆盖 django AuthenticationForm 输入 css 类?

    我有一个使用基本 django 注册框架的 django 站点 我的登录页面工作正常 但我想更改输入上的 css 类 传递到登录页面的表单看起来是一个 AuthenticationForm 类 将 css 类添加到用户名和密码字段的好方法是
  • Visual Basic 6中如何保存断点

    如何在 Visual Basic 6 中保存断点 有任何插件吗 现在我有 MZ Tools 但不幸的是它们不保存断点 我不确定第三方工具 但您始终可以使用 Debug Assert False 完成后记得将其删除
  • For 语句,每第 1000 次演练,做某事

    我正在遍历 For 循环 100 000 次 这个数字可以多样化 每第一千次我都想做一些特别的事情 那些我在其他演练中没有做的事情 像这样的东西 for int i 0 i lt 100000 i doTasks Normal if i 1
  • git-http-backend 与 apache2.4 Centos 7

    我尝试在我的 apache 服务器上设置 Git 服务器 但它不起作用 我得到了以下 git conf SetEnv GIT PROJECT ROOT var www html git project1 SetEnv GIT HTTP EX
  • Java 8 Stream API 中的多个聚合函数

    我有一个类定义如下 public class TimePeriodCalc private double occupancy private double efficiency private String atDate 我想使用 Java