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
繁體地址,請注明出處:http://hk.pswp.cn/news/907204.shtml
英文地址,請注明出處:http://en.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 結合 …