List<Map<String, Object>>汇总统计排序

开发环境:jdk 1.8

需求一:
1、统计每个小时(升序)不同事件的产品产量
2、统计不同事件(OK 、NG)的总产量

public static void main(String[] args) {//数据源List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();Map<String, Object> map1 = new HashMap<String, Object>();map1.put("hour", "10");//小时map1.put("event", "OK");//事件map1.put("number", 12);//产量list.add(map1);Map<String, Object> map2 = new HashMap<String, Object>();map2.put("hour", "08");map2.put("event", "NG");map2.put("number", 10);list.add(map2);Map<String, Object> map3 = new HashMap<String, Object>();map3.put("hour", "09");map3.put("event", "NG");map3.put("number", 7);list.add(map3);Map<String, Object> map4 = new HashMap<String, Object>();map4.put("hour", "08");map4.put("event", "OK");map4.put("number", 30);list.add(map4);System.out.println(list);System.out.println("--------------------------");// 进行分组和汇总 并 按hour字段的升序排序// 按小时统计每个小时的事件和数量Map<String, Map<String, Integer>> hourEventNumberSum = list.stream().collect(Collectors.groupingBy(item -> (String) item.get("hour"),TreeMap::new, // 使用 TreeMap 以保证 hour 字段升序Collectors.groupingBy(item -> (String) item.get("event"),Collectors.summingInt(item -> (Integer) item.get("number")))));// 打印结果// 这里如果直接定义int变量累加计算总和,会报错:Local variable count defined in an enclosing scope must be final or effectively final,增强for里面用外部变量需要final,但这里在做累加计算,无法使用final修饰,所以改用了List<Integer>计算总和//计算OK总和用的集合List<Integer> listOk = new ArrayList<Integer>();//计算NG总和用的集合List<Integer> listNg = new ArrayList<Integer>();hourEventNumberSum.forEach((hour, eventMap) -> {System.out.println("Hour: " + hour);eventMap.forEach((event, number) -> {System.out.println("  Event: " + event + ", Number: " + number);if ("OK".equals(event.toUpperCase())) {listOk.add(number);}else if ("NG".equals(event.toUpperCase())) {listNg.add(number);}});});System.out.println("--------------------------");//计算OK总和int sumOk = listOk.stream().mapToInt(Integer::intValue) // 转换成 IntStream.sum(); // 计算和System.out.println("OK Sum of elements: " + sumOk);//计算NG总和int sumNg = listNg.stream().mapToInt(Integer::intValue) // 转换成 IntStream.sum(); // 计算和System.out.println("NG Sum of elements: " + sumNg); }

执行结果
在这里插入图片描述
需求二:
统计每个小时(倒序)不同事件的产品产量

public static void main29(String[] args) {//数据源List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();Map<String, Object> map1 = new HashMap<String, Object>();map1.put("hour", "10");map1.put("event", "B");map1.put("number", 12);list.add(map1);Map<String, Object> map2 = new HashMap<String, Object>();map2.put("hour", "08");map2.put("event", "A");map2.put("number", 10);list.add(map2);Map<String, Object> map3 = new HashMap<String, Object>();map3.put("hour", "09");map3.put("event", "A");map3.put("number", 7);list.add(map3);Map<String, Object> map4 = new HashMap<String, Object>();map4.put("hour", "08");map4.put("event", "B");map4.put("number", 30);list.add(map4);System.out.println(list);System.out.println("--------------------------");// 进行分组和汇总Map<String, Map<String, Integer>> hourEventNumberSum = list.stream().collect(Collectors.groupingBy(item -> (String) item.get("hour"),TreeMap::new, // 使用 TreeMap 以保证按 hour 字段升序Collectors.groupingBy(item -> (String) item.get("event"),Collectors.summingInt(item -> (Integer) item.get("number")))));// 将 TreeMap 转换为倒序的 LinkedHashMapMap<String, Map<String, Integer>> sortedHourEventNumberSum = hourEventNumberSum.entrySet().stream().sorted(Map.Entry.<String, Map<String, Integer>>comparingByKey(Comparator.reverseOrder())).collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue,(e1, e2) -> e1,LinkedHashMap::new));// 打印结果sortedHourEventNumberSum.forEach((hour, eventMap) -> {System.out.println("Hour: " + hour);eventMap.forEach((event, number) -> {System.out.println("  Event: " + event + ", Number: " + number);});});}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云计算实训48——k8s环境搭建(详细版)

1.创建主机、设置ip、设置hostname 2.设置免密登录 # 生成私钥 [rootk8s-master ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa already exists. Overwrite (y/n)? y Enter passphr…

vue3 使用swiper制作带缩略图的轮播图

效果图 实现代码 <template><div class"wrap"><!-- 主轮播图 --><swiper :style"{--swiper-navigation-color: #fff,--swiper-pagination-color: #fff,}" :modules"modules" :navigation"true" :thumbs"{ …

计算机网络 第2章 物理层

文章目录 通信基础基本概念信道的极限容量编码与调制常用的编码方法常用的调制方法 传输介质双绞线同轴电缆光纤以太网对有限传输介质的命名规则无线传输介质物理层接口的特性 物理层设备中继器集线器一些特性 物理层任务&#xff1a;实现相邻节点之间比特&#xff08;0或1&…

pptpd配置文件/etc/pptpd.conf详解

正文共&#xff1a;1111 字 2 图&#xff0c;预估阅读时间&#xff1a;1 分钟 如果要在Linux系统配置PPTP&#xff08;Point-to-Point Tunneling Protocol&#xff0c;点到点隧道协议&#xff09;VPN&#xff0c;一般是使用pptpd软件。pptpd命令通常从配置文件/etc/pptpd.conf中…

单片机拍照_将采集的RGB图像封装为BMP格式保存到SD卡

文章目录 一、前言二、BMP文件结构2.1 BMP图片的格式说明 2.2 RGB888与RGB565格式是什么&#xff1f;&#xff08;1&#xff09;RGB565&#xff08;2&#xff09;RGB888&#xff08;3&#xff09;区别&#xff08;4&#xff09;如何构成&#xff08;5&#xff09;示例 三、实现…

【Leetcode56】合并区间(数组 | 排序)

文章目录 一、题目二、思路三、代码 一、题目 二、思路 先将所有子列表按照start_pos进行排序&#xff0c;有利于保持顺序性&#xff0c;每次处理新子列表时&#xff0c;只用和结果列表ans_lst的最后一个子列表对比&#xff0c;如果有重合则合并&#xff0c;然后将合并的新子列…

Java 入门指南:Java 并发编程 —— 同步工具类 Phaser(相位器)

文章目录 同步工具类Phaser主要特点核心方法使用步骤适用场景使用示例 同步工具类 JUC&#xff08;Java.util.concurrent&#xff09;是 Java 提供的用于并发编程的工具类库&#xff0c;其中包含了一些通信工具类&#xff0c;用于在多个线程之间进行协调和通信&#xff0c;特别…

创新实验报告VC++案例开发十二生肖的俄罗斯方块智力游戏完整代码设计方案

一&#xff0e;项目名称 十二生肖俄罗斯方块 二&#xff0e;开发背景&#xff1a; 俄罗斯方块是一个很低古老的一个小游戏&#xff0c;到但今日它还有很大的魅力。 三&#xff0e;技术路线或工作原理&#xff1a; 采用的软件及开发平台 Micosoft Visual 6.0 项目的总体方…

uniapp 原生插件开发 UI

前言&#xff1a; 在集成某些特定 原生SDK的时候&#xff0c;它本身是带UI控件的。当我们使用 uniapp 开发app的时候实是 可以使使用 nvue 页面&#xff0c;以 weex 的方式嵌入原生的UI控件。 我这边的场景是 接入连连app的支付&#xff0c;它有个自己的密码键盘 控件是原生的页…

树形弹窗选择框/vue2/Element/弹框选择

前言 此类选择器根据vueelementUI实现&#xff0c;使用vue3的可以根据此案例稍作改动即可实现&#xff0c;主要功能有弹出选择、搜索过滤、搜索结果高亮等&#xff0c;此选择器只支持单选&#xff0c;如需多选可在此基础进行改造。 效果图 代码实现 使用时&#xff0c;props-…

NVIDIA AI Workbench 让 Windows 上的 GPU 使用更加简便

NVIDIA AI Workbench 是一款免费的、用户友好型开发环境管理器&#xff0c;可在您选择的系统&#xff08;PC、工作站、数据中心或云&#xff09;上简化数据科学、ML 和 AI 项目。在 Windows、macOS 和 Ubuntu 上&#xff0c;您可以本地开发、测试项目和构建项目原型&#xff0c…

一文说清什么是数据仓库

01 数据仓库的概念 数据仓库的概念可以追溯到20世纪80年代&#xff0c;当时IBM的研究人员开发出了“商业数据仓库”。本质上&#xff0c;数据仓库试图提供一种从操作型系统到决策支持环境的数据流架构模型。 目前对数据仓库&#xff08;Data Warehouse&#xff09;的标准定义&a…

【研赛论文】数学建模2024华为杯论文word/latex模板

国赛结束&#xff0c;研究生瞩目的研赛马上就要来了&#xff0c;相信研究生同学也是在努力的准备当中&#xff0c;在这里祝愿大家能够获得一个好的名次。一举冲出重围&#xff0c;拿下国奖。在数模比赛当中&#xff0c;论文是参赛者唯一能够与评阅老师进行沟通的方式&#xff0…

工厂安灯系统在优化生产流程上的优势

工厂安灯系统通过可视化的方式&#xff0c;帮助工厂管理者和操作工人及时了解生产状态&#xff0c;快速响应问题&#xff0c;从而优化生产流程。 一、安灯系统实时监控与反馈 安灯系统的核心功能是实时监控生产线的状态。通过在生产现场设置灯光、显示屏等设备&#xff0c;工人…

VUE + NODE 历史版本安装

以node 12.20.0为例子&#xff0c;想下载哪个版本&#xff0c;后面写哪个版本 https://registry.npmmirror.com/binary.html?pathnode/v12.20.0/ 安装国内镜像7.1.0 cnpm npm install -g cnpm7.1.0 -g --registryhttps://registry.npmmirror.com 安装vue脚手架4.5.15 cnpm …

【最新顶刊综述】【多模态学习】Vision + X:A Survey on Multimodal Learning in the Light of Data

VisionX&#xff1a;基于数据的多模态学习综述 论文链接 0.论文摘要和信息 摘要 摘要——我们以多感官的方式感知世界并与世界交流&#xff0c;不同的信息源由人脑的不同部分复杂地处理和解释&#xff0c;构成一个复杂但和谐统一的感知系统。为了赋予机器真正的智能&#x…

【信创】麒麟KOS上安装使用网络抓包工具Wireshark

原文链接&#xff1a;【信创】麒麟KOS上安装使用网络抓包工具Wireshark Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于如何在麒麟桌面操作系统上安装和使用Wireshark的文章。Wireshark是一款强大的网络协议分析工具&#xff0c;广泛应用于网络故障排查、网络流…

OCR在线识别网站现已上线!

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 由作者亲自开发的ocr识别网站哈哈,暂时汇聚了三十多种验证码模型以及算法,欢迎各路朋友去尝试,网站地址如下 http://gbj5w3.natappfree.cc/ocr 验证码类型包括但…

qt绘制时钟

代码 #include "widget.h" #include "ui_widget.h"#include <QWidget> #include <QPaintEvent> //绘图事件 #include <QDebug> //测试 #include <QPainter> //画家 #include <QPen> //笔 #include <QBrush> //画刷 …

JDK下载安装教程(国产化生产环境无联网服务器部署JDK实操)

-----------------------------生产环境实操&#xff0c;记录时间2024年09-11日----------------------------- 前言&#xff1a;一定要下载适合自己系统版本的JDK 1.32位系统就下载32位系统的JDK&#xff0c;64位系统就下载64位系统的JDK&#xff0c;否则会报错&#xff01;…