[java]集合类stream的相关操作

news2024/11/29 4:53:38

1.对list中的map进行分组

下面例子中,根据高度height属性进行分组

List<Map<String, Float>>originalList = new ArrayList<>();
        originalList.add(new HashMap<String,Float>() {{
            put("lng", 180.0f);
            put("lat",90f);
            put("val",10f);
            put("height", 100.0f);
        }});

        originalList.add(new HashMap<String,Float>() {{
            put("lng", 180.0f);
            put("lat",90f);
            put("val",11f);
            put("height", 100.0f);
        }});

        originalList.add(new HashMap<String,Float>() {{
            put("lng", 180.0f);
            put("lat",90f);
            put("val",20f);
            put("height", 200.0f);
        }});

        originalList.add(new HashMap<String,Float>() {{
            put("lng", 180.0f);
            put("lat",90f);
            put("val",21f);
            put("height", 200.0f);
        }});

        Map<Object, List<Map>> groupedMap = originalList.stream().collect(Collectors.groupingBy(map -> {
            return map.get("height");
        }));

        System.out.println(groupedMap);

执行结果:

 

从结果可以看到,已经按照height进行分组成功了。

2.对list中的map进行分组,根据分组后的key进行排序

 同样,还是先根据height进行分组,默认分组后生成的Map是不会根据高度进行排序的,因为Map没有这个功能,所以需要再多做一次才做。看代码:

List<Map<String, Float>>originalList = new ArrayList<>();
        originalList.add(new HashMap<String,Float>() {{
            put("lng", 180.0f);
            put("lat",90f);
            put("val",10f);
            put("height", 100.0f);
        }});

        originalList.add(new HashMap<String,Float>() {{
            put("lng", 180.0f);
            put("lat",90f);
            put("val",11f);
            put("height", 100.0f);
        }});

        originalList.add(new HashMap<String,Float>() {{
            put("lng", 180.0f);
            put("lat",90f);
            put("val",20f);
            put("height", 200.0f);
        }});

        originalList.add(new HashMap<String,Float>() {{
            put("lng", 180.0f);
            put("lat",90f);
            put("val",21f);
            put("height", 200.0f);
        }});

        Map<Object, List<Map>> groupedMap = originalList.stream().collect(Collectors.groupingBy(map -> {
            return map.get("height");
        }));

        // 使用TreeMap对键进行排序
        TreeMap<Object, List<Map>> sortedGroupedMap = new TreeMap<Object, List<Map>>(groupedMap);
        System.out.println(sortedGroupedMap);

打印结果:

 

可以看到map第一个元素key是100,第二个key是200,说明排序成功

3.对list中的map进行分组,并求每个组中最大值对应的数据

从图中可以看到heigh为100这组里面,有2条数据,这2个也是map,每个map中包含了lng,lat,height,val,现在要将val的值最大的那个map查出来。代码如下:

 List<Map<String, Float>>originalList = new ArrayList<>();
        originalList.add(new HashMap<String,Float>() {{
            put("lng", 180.0f);
            put("lat",90f);
            put("val",10f);
            put("height", 100.0f);
        }});

        originalList.add(new HashMap<String,Float>() {{
            put("lng", 180.0f);
            put("lat",90f);
            put("val",11f);
            put("height", 100.0f);
        }});

        originalList.add(new HashMap<String,Float>() {{
            put("lng", 180.0f);
            put("lat",90f);
            put("val",20f);
            put("height", 200.0f);
        }});

        originalList.add(new HashMap<String,Float>() {{
            put("lng", 180.0f);
            put("lat",90f);
            put("val",21f);
            put("height", 200.0f);
        }});


        // 按照alti进行分组,并找出每个组中val的最大值
        Map<Object, Optional<Map<String, Float>>> result = originalList.stream()
            .collect(Collectors.groupingBy(map -> map.get("height"),Collectors.maxBy(Comparator.comparing(map -> Float.valueOf(map.get("val"))))
        ));


        System.out.println(result);

运行结果:

从结果可以看出通过height进行了分组,并将分组后,求出了每组中最大值的数据。

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

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

相关文章

Eclipse使用TFS(Team Foundation Server) 超详细

Eclipse使用TFS 1、什么是TFS2、TFS和Git的区别3、签出代码4、签入代码4.1、签出以进行编辑4.2、修改本地代码4.3、签入挂起的更改4.4、签入 如果不能 签入挂起的更改&#xff0c;则先 签出以进行编辑如果 签入挂起的更改不可选中&#xff0c;则 如下操作 1、什么是TFS Team F…

阿里云使用域名访问部署网站【2024 详细版】

目录 一、注册域名 1.创建信息模板 2.查询注册域名 二、域名设置 1.SSL证书 2.域名解析 3.宝塔设置 一、注册域名 1.创建信息模板 点击右上角【三】-【域名】-【信息模板】-【创建信息模板】- 填写信息 模板分为个人和企业两种&#xff0c;根据情况进行创建即可&…

c++ 里构造函数的形参与数据成员的同名问题

如题&#xff0c;这时&#xff0c;或许在 java 里&#xff0c;会报语法错误。但在 c vs2019 开了 c20语法规范。这不再是错误。这样的好处是解决了咱们的起变量名的麻烦&#xff1a;重名现在已不是错误&#xff0c;编译器可以解决了。测试如下&#xff1a; 我们看看 c 编译器是…

揭秘!速卖通、敦煌网、国际站出单背后的黑科技:自养号测评技术

在竞争激烈的跨境电商平台上&#xff0c;如亚马逊、速卖通、Lazada、Shopee、敦煌网、Temu、Shein、美客多和阿里国际等&#xff0c;稳定出单成为每位卖家共同追求的目标。为了实现这一目标&#xff0c;卖家需要从产品选择、运营策略和客户服务等多个维度进行全面考量&#xff…

【C语言】13.指针与数组的关系

一、数组名的理解 #include <stdio.h> int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };printf("&arr[0] %p\n", &arr[0]);printf("arr %p\n", arr);return 0; }通过上述代码输出结果我们发现结果相同&#xff0c;因此我们得出结论&a…

电脑开机后出现Aptio Setup Utility 处理方法

电脑开机后出现Aptio Setup Utility怎么处理 Aptio Setup Utility界面的原因&#xff1a; 这是由于 bios设置与真实的硬件情况不匹配硬盘故障找不到可启动的硬盘情况 我的问题是找不到可启动的硬盘情况 解决方式如下&#xff1a; 进入如下界面了&#xff0c;选择Boot选项…

SAP_ABAP模块-记录第三方通过Webservice调用SAP接口时的问题

一、业务背景&#xff1a; 最近SAP有个货物移动的接口需要优化&#xff0c;之前与第三方销售管理平台对接&#xff0c;一直都没有问题的&#xff0c;但是现在SAP这边优化后&#xff0c;然后对方平台的开发同事说&#xff0c;调用不成功&#xff0c;报错了&#xff0c;最开始一直…

vue3 antdv RadioButton默认值选择问题处理

1、先上官方文档&#xff1a; Ant Design Vue — An enterprise-class UI components based on Ant Design and Vue.js 官方代码&#xff1a; <template><div><div><a-radio-group v-model:value"value1"><a-radio-button value"a…

添加右键菜单(以git为例)

1、打开注册表编辑器 打开系统注册表&#xff0c;使用组合键“Win R”输入“regedit”。 依次展开”HKEY_CLASSES_ROOT\Directory\Background\shell”。 2、新建右键菜单项 在[Background]下找到“shell”如果没有则新建项shell&#xff0c;接着在“shell”下右键-新建项名…

M12单端I/O预铸法兰插座A-code

M12单端I/O预铸法兰插座A-code概述 M12单端I/O预铸连接器A-code是一种常用于工业自动化领域的连接器件&#xff0c;主要用于传感器和执行器之间的信号传输。它的设计遵循国际标准IEC 61076-2-101&#xff0c;具有良好的防水防尘性能&#xff0c;通常达到IP67的保护等级。M12连…

kettle无法启动问题_PENTAHO_JAVA_HOME

1&#xff0c;遇到spoon.bat启动报错&#xff1a;先增加pause看清错误信息 1.1&#xff0c;错误信息 1.2&#xff0c;因为本地安装jdk1.6无法支持现有版本kettle。只能手动执行kettle调用的java路径&#xff1b;如下 系统--高级系统设置--高级--环境变量 启动成功

Day 29:1600. 王位继承顺序

Leetcode1600. 王位继承顺序 一个王国里住着国王、他的孩子们、他的孙子们等等。每一个时间点&#xff0c;这个家庭里有人出生也有人死亡。 这个王国有一个明确规定的王位继承顺序&#xff0c;第一继承人总是国王自己。我们定义递归函数 Successor(x, curOrder) &#xff0c;给…

java内存溢出堆栈分析

一、背景 java应用系统内存溢出导致服务不可用&#xff0c;可手动生成dump文件或添加配置参数生成文件&#xff0c;进行dump文件分析定位具体内存OOM的原因&#xff0c;并优化修复。 二、JProfile分析 分析工具下载 https://download.csdn.net/download/xinpz/89463963 三、…

【案例分析:基于 Python 的几种神经网络构建 一维的和二维的全介质和金属SPR 材料的光谱预测与逆向设计】

案例分析&#xff1a;传播相位与几何相位超构单元仿真与器件库提取与二维超构透镜设计与传播光场仿真 案例分析&#xff1a; 片上的超构单元仿真与光学参数提取 案例分析&#xff1a;基于粒子群方法的耦合器设计 案例分析&#xff1a;基于 Python 的几种神经网络构建 一维的和二…

硫化物固态电解质在全固态锂电池制造领域发展潜力大

硫化物固态电解质在全固态锂电池制造领域发展潜力大 固态电解质主要包括氧化物、硫化物、聚合物等类型。氧化物固态电解质由于研发难度相对较低&#xff0c;是目前主流技术路线。硫化物固态电解质研发难度较高&#xff0c;但性能优异&#xff0c;特别适合制造全固态锂电池&…

【秋招刷题打卡】Day01-自定义排序

Day01-自定排序 前言 给大家推荐一下咱们的 陪伴打卡小屋 知识星球啦&#xff0c;详细介绍 >笔试刷题陪伴小屋-打卡赢价值丰厚奖励 < ⏰小屋将在每日上午发放打卡题目&#xff0c;包括&#xff1a; 一道该算法的模版题 (主要以力扣&#xff0c;牛客&#xff0c;acwin…

信息学奥赛初赛天天练-31-CSP-J2022基础题-指针、数组、链表、进制转换、深度优先搜索、广度优先搜索、双栈实现队列应用

PDF文档公众号回复关键字:20240621 2022 CSP-J 选择题 单项选择题&#xff08;共15题&#xff0c;每题2分&#xff0c;共计30分&#xff1a;每题有且仅有一个正确选项&#xff09; 3.运行以下代码片段的行为是 ( ) int x 101; int y 201; int * p &x; int * q &y;…

【Golang - 90天从新手到大师】Day09 - string

系列文章合集 Golang - 90天从新手到大师 String 一个字符串是一个不可改变的字节序列。字符串可以包含任意的数据&#xff0c;但是通常是用来包含人类可读的文本。 len()返回字符串字节数目&#xff08;不是rune数&#xff09;。 通过索引可以访问某个字节值&#xff0c;0…

数据仓库 基础教程

数据仓库 基础教程 1. 数据仓库概述 数据仓库(Data Warehouse,简称DW或者DWH)是通过集成来自多个异构数据源的数据来构建的。它支持分析报告、结构化和/或特别查询和决策制定。本教程采用循序渐进的方法来解释数据仓库的所有必要概念。 “数据仓库”一词最早是由Bill Inmon在1…

VS编译器字体颜色设置

默认颜色不好看&#xff0c;颜色之间代码各个关系之间没有很强关联性所以要设置字体颜色 颜色一步到位版本&#xff1a; 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a;One dark Pro 第四步&#xff1a; 等待安装完后重启VS 点击Modify&#xff0c;一段时间结束后选…