List优雅分组

一、前言

        最近小永哥发现,在开发过程中,经常会遇到需要对list进行分组,就是假如有一个RecordTest对象集合,RecordTest对象都有一个type的属性,需要将这个集合按type属性进行分组,转换为一个以type为key,RecordTest集合为value的Map对象,这个功能其实本身并不难,相信以老铁们的实力那还不是轻轻松松嘛,那下面小永哥就先献丑了。

二、代码实现

2.1、常规实现

        实现思路:通过创建一个Map,然后遍历原RecordTest集合,在循环中先获取到type属性,然后判断该type属性在Map中是否存在,如果以存在,就从Map中通过key获取到一个list,然后将当前本次循环所操作的RecordTest对象add到这个list中。如果该type在Map中不存在,那么就新建一个list,将本次循环的RecordTest对象add进去,然后再以type为key,list为value的方式put进Map中,最后我们就获取到了一个以type分好组的Map对象了。

package com.relation;import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson2.JSON;
import org.junit.jupiter.api.Test;import java.util.List;
import java.util.Map;/*** @author huhy* @version 1.0* @Description:* @ClassName Date:2025/5/20 21:50*/
public class ListTest {@Testpublic void listGroupTest(){//模拟数据准备List<RecordTest> recordTestList = CollectionUtil.newArrayList();recordTestList.add(new RecordTest("型号A","item-code-A","item"));recordTestList.add(new RecordTest("型号B","item-code-B","item"));recordTestList.add(new RecordTest("文件A","file-code-B","file"));recordTestList.add(new RecordTest("文件B","file-code-B","file"));recordTestList.add(new RecordTest("文件C","file-code-C","file"));recordTestList.add(new RecordTest("图片A","photo-code-A","photo"));recordTestList.add(new RecordTest("视频A","video-code-C","video"));//按type属性进行分组Map<String,List<RecordTest>> recordTestGroupMap = MapUtil.newHashMap();for (RecordTest recordTest : recordTestList) {String type = recordTest.getType();List<RecordTest> recordTests;if(recordTestGroupMap.containsKey(type)){recordTests = recordTestGroupMap.get(type);}else {recordTests = CollectionUtil.newArrayList();recordTestGroupMap.put(type,recordTests);}recordTests.add(recordTest);}//打印System.out.println(JSON.toJSONString(recordTestGroupMap));}class RecordTest{private String name;private String code;private String type;public RecordTest(String name, String code, String type) {this.name = name;this.code = code;this.type = type;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getType() {return type;}public void setType(String type) {this.type = type;}}}

        

        打印出的信息不太方便观看,我们找个工具将JSON格式化一下,顺便提一句,有时候我们需要将JSON文本格式化的时候,是不是冷不丁还想不到什么好的方式,特别是开发环境还是内网的时候,没办法上网在线转?其实不管是内网还是外网开发环境,我们作为一个后端开发人员,postman可以说是标配,毕竟还得自测接口嘛,这时候postman就能发挥作用了,postman的post请求在输入参数以后,有一个Beautify的按钮,轻轻一点,JSON文本就格式化好了,非常方便。

        这点小玩意儿虽然顺利实现了,而且实现代码也不孬,但是距离优雅还是差不少,下面我们换种嗨皮的实现方式。

2.2、优雅实现

        

@Testpublic void listGroupTest(){//模拟数据准备List<RecordTest> recordTestList = CollectionUtil.newArrayList();recordTestList.add(new RecordTest("型号A","item-code-A","item"));recordTestList.add(new RecordTest("型号B","item-code-B","item"));recordTestList.add(new RecordTest("文件A","file-code-B","file"));recordTestList.add(new RecordTest("文件B","file-code-B","file"));recordTestList.add(new RecordTest("文件C","file-code-C","file"));recordTestList.add(new RecordTest("图片A","photo-code-A","photo"));recordTestList.add(new RecordTest("视频A","video-code-C","video"));//按type属性进行分组Map<String,List<RecordTest>> recordTestGroupMap = recordTestList.stream().collect(Collectors.groupingBy(RecordTest::getType));//打印System.out.println(JSON.toJSONString(recordTestGroupMap));}

三、结语

        通过jdk1.8特性一行实现分组功能,代码量瞬间减少了10行,虽然现在节省的10行不算什么,但是积少成多,等真正开发的时候,我们可以把学到的东西都尽可能的付诸于实践,这样节省的就不仅仅是10行,可能就是成千上万行,我们的代码也会越来越精炼。

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

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

相关文章

AI与.NET技术实操系列(八):使用Catalyst进行自然语言处理

引言 自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;是人工智能领域中最具活力和潜力的分支之一。从智能客服到机器翻译&#xff0c;再到语音识别&#xff0c;NLP技术正以其强大的功能改变着我们的生活方式和工作模式。 Catalyst的推出极大降低了NLP…

MySQL 8.0 OCP 1Z0-908 题目解析(13)

题目49 Choose the best answer. t is a non - empty InnoDB table. Examine these statements, which are executed in one session: BEGIN; SELECT * FROM t FOR UPDATE;Which is true? ○ A) mysqlcheck --analyze --all - databases will execute normally on all ta…

Docker 一键部署倒计时页面:Easy Countdown全设备通用

Easy Countdown 介绍 Easy countdown是一个易于设置的倒计时页面。可以设置为倒计时或计时器。可用于个人生活、工作管理、教育、活动策划等多个领域。 &#x1f6a2; 项目地址 Github&#xff1a;https://github.com/Yooooomi/easy-countdown &#x1f680;Easy Countdown …

Python训练打卡Day35

模型可视化与推理 知识点回顾&#xff1a; 三种不同的模型可视化方法&#xff1a;推荐torchinfo打印summary权重分布可视化进度条功能&#xff1a;手动和自动写法&#xff0c;让打印结果更加美观推理的写法&#xff1a;评估模式 模型结构可视化 理解一个深度学习网络最重要的2点…

四、生活常识

一、效应定律 效应 1、沉没成本效应 投入的越多&#xff0c;退出的难度就越大&#xff0c;因为不甘心自己之前的所有付出都付之东流。 2、破窗效应 干净的环境下&#xff0c;没有人会第一个丢垃圾&#xff0c;但是当环境变得糟糕&#xff0c;人们就开始无所妒忌的丢垃圾。…

机器学习圣经PRML作者Bishop20年后新作中文版出版!

机器学习圣经PRML作者Bishop20年后新书《深度学习&#xff1a;基础与概念》出版。作者克里斯托弗M. 毕晓普&#xff08;Christopher M. Bishop&#xff09;微软公司技术研究员、微软研究 院 科学智 能 中 心&#xff08;Microsoft Research AI4Science&#xff09;负责人。剑桥…

Python应用嵌套猜数字小游戏

大家好!今天向大家分享的是有关“嵌套”的猜数字小游戏。希望能够帮助大家理解嵌套。 代码呈现: # 1. 构建一个随机的数字变量 import random num random.randint(1, 10)guess_num int(input("输入你要猜测的数字&#xff1a; "))# 2. 通过if判断语句进行数字的猜…

黑马k8s(十四)

1.Service-概述 service&#xff1a;用于四层路由的负载&#xff0c;Ingress七层路由的负载&#xff1b;&#xff0c;先学习service 开启ipvs 2.Service-资源清单文件介绍 修改每个显示的内容 ClusterIP类型的Service Endpoints&#xff1a;建立service与pod关联 亲和性测试…

Kotlin 中 Lambda 表达式的语法结构及简化推导

在 Kotlin 编程中&#xff0c;Lambda 表达式是一项非常实用且强大的功能。今天&#xff0c;我们就来深入探讨一下 Lambda 表达式的语法结构&#xff0c;以及它那些令人 “又爱又恨” 的简化写法。 一、Lambda 表达式完整语法结构 Lambda 表达式最完整的语法结构定义为{参数名…

Kafka Streams 和 Apache Flink 的无状态流处理与有状态流处理

Kafka Streams 和 Apache Flink 与数据库和数据湖相比的无状态和有状态流处理的概念和优势。 在数据驱动的应用中&#xff0c;流处理的兴起改变了我们处理和操作数据的方式。虽然传统数据库、数据湖和数据仓库对于许多基于批处理的用例来说非常有效&#xff0c;但在要求低延迟…

【后端高阶面经:缓存篇】34、高并发下缓存穿透、击穿、雪崩怎么解决

一、缓存三大核心问题:穿透、击穿、雪崩的本质区别 (一)概念对比表 问题类型核心特征典型场景危害等级缓存穿透数据在缓存和数据库中均不存在,请求直接穿透到数据库恶意攻击(伪造不存在的ID)、业务逻辑漏洞★★★★★缓存击穿热点数据在缓存中过期,大量并发请求同时击穿…

使用Rancher在CentOS 环境上部署和管理多Kubernetes集群

引言 随着容器技术的迅猛发展&#xff0c;Kubernetes已成为容器编排领域的事实标准。然而&#xff0c;随着企业应用规模的扩大&#xff0c;多集群管理逐渐成为企业IT架构中的重要需求。 Rancher作为一个开源的企业级多集群Kubernetes管理平台&#xff0c;以其友好的用户界面和…

【Mini-F5265-OB开发板试用测评】按键控制测试

本文介绍了如何使用按键控制 MCU 引脚的输出电平。 原理 由原理图可知 板载用户按键 K1 和 K2 分别与主控的 PB0 和 PB1 相连。 代码 #define _MAIN_C_#include "platform.h" #include "gpio_key_input.h" #include "main.h"int main(void) …

用C#最小二乘法拟合圆形,计算圆心和半径

用C#最小二乘法拟合圆形&#xff0c;计算圆心和半径 using System; using System.Collections.Generic;namespace ConsoleApp2 {internal class Program{static void Main(string[] args){List<Tuple<double, double>> points new List<Tuple<double, doubl…

四、web安全-行业术语

1. 肉鸡 所谓“肉鸡”是一种很形象的比喻&#xff0c;比喻那些可以随意被我们控制的电脑&#xff0c;对方可以是WINDOWS系统&#xff0c;也可以是UNIX/LINUX系统&#xff0c;可以是普通的个人电脑&#xff0c;也可以是大型的服务器&#xff0c;我们可以象操作自己的电脑那样来…

MYSQL丢失pid处理方式

1、停止服务器 systemctl stop mysqld 2、修改 /data/mysql/etc/my.cnf pid-file /tmp/mysql/mysql.pid 改为 pid-file /data/mysql/mysql.pid 3、创建 touch /data/mysql/mysql.pid ch…

《计算机组成原理》第 2 章 - 计算机的发展及应用​

计算机从诞生至今&#xff0c;经历了翻天覆地的变化&#xff0c;应用领域也在不断拓展。本文将结合 Java 代码实例&#xff0c;带你深入了解计算机的发展历程、应用场景及未来展望&#xff0c;让你在学习理论的同时&#xff0c;还能通过实践加深理解。​ 2.1 计算机的发展史​ …

Github 2025-05-26 开源项目周报Top15

根据Github Trendings的统计,本周(2025-05-26统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5TypeScript项目3JavaScript项目3C++项目2Roff项目1Go项目1C#项目1Jupyter Notebook项目1Rust项目1CSS项目1Shell项目1Dockerfile项目…

详解MYSQL索引失效问题排查

目录 一、快速定位索引失效的步骤 1. 使用 EXPLAIN 分析执行计划详解Mysql的Explain语句 2. 确认索引是否存在 3. 检查查询条件是否符合索引规则 二、常见索引失效场景及解决方法 1. 索引列参与计算或函数 2. 隐式类型转换 3. 使用 LIKE 以通配符开头 4. 使用 OR 连接…

在 springboot3.x 使用 knife4j 以及常见报错汇总

目录 引言&#xff1a; 引入依赖&#xff1a; 配置文件&#xff1a; 过滤静态资源&#xff1a; 增强模式&#xff1a; 便捷地址访问&#xff1a; 常见问题&#xff1a; 注解使用实例&#xff1a; &#x1f4c4; ​文档参考地址​&#xff1a; SpringBoot 3.x 结合 …