Java工具類,對象List提取某個屬性為List,對象List轉為對象Map其中某個屬性作為Key值

Java工具類

package org.common;import lombok.extern.slf4j.Slf4j;import java.util.*;
import java.util.stream.Collectors;@Slf4j
public final class CollectorHelper {/*** @param element* @param propertyName* @param <E>* @return*/public static <E> List toList(Collection<E> element, String propertyName) {if (element == null) {return Collections.emptyList();}return element.stream().map(item -> {return ReflectCallField.getForInstance(item, propertyName);}).collect(Collectors.toList());}/*** @param element* @param propertyName* @param <E>* @return*/public static <E> List extractList(Collection<E> element, String propertyName) {if (element == null) {return Collections.emptyList();}List dataList = new ArrayList();for (E item : element) {Object obj = ReflectCallField.getForInstance(item, propertyName);if (obj != null) {dataList.add(obj);}}return dataList;}/*** @param element* @param propertyName* @param <K>* @param <V>* @return*/public static <K, V> Map<K, V> toMap(Collection<V> element, String propertyName) {if (element == null) {return Collections.emptyMap();}try {return (Map<K, V>) element.stream().collect(Collectors.toMap(item -> {return ReflectCallField.getForInstance(item, propertyName);}, item -> item));} catch (Exception e) {log.error(e.getMessage());}return Collections.emptyMap();}/*** @param element* @param propertyName* @param <K>* @param <V>* @return*/public static <K, V> Map<K, V> extractMap(Collection<V> element, String propertyName) {if (element == null) {return Collections.emptyMap();}Map<K, V> dataMap = new HashMap();for (V item : element) {Object key = ReflectCallField.getForInstance(item, propertyName);if (key != null) {dataMap.put((K) key, item);}}return dataMap;}}
package org.common;import java.lang.reflect.Field;public class ReflectCallField {/*** @param entryClass* @param fieldName* @param <T>* @return*/public static <T> T getForStatic(Class entryClass, String fieldName) {if (entryClass == null) {return null;}T result = null;try {// 反射獲取Field callField = entryClass.getDeclaredField(fieldName);callField.setAccessible(true);return (T) callField.get(entryClass);} catch (Exception e) {e.printStackTrace();}return result;}/*** @param entryClass* @param fieldName* @param value*/public static void setForStatic(Class entryClass, String fieldName, Object value) {if (entryClass == null) {return;}try {Field callField = entryClass.getDeclaredField(fieldName);callField.setAccessible(true);callField.set(fieldName, value);} catch (Exception e) {e.printStackTrace();}}/*** @param entryObject* @param fieldName* @param <T>* @return*/public static <T> T getForInstance(Object entryObject, String fieldName) {if (entryObject == null) {return null;}T result = null;try {// 反射獲取Field callField = entryObject.getClass().getDeclaredField(fieldName);callField.setAccessible(true);return (T) callField.get(entryObject);} catch (Exception e) {e.printStackTrace();}return result;}/*** @param entryObject* @param fieldName* @param value*/public static void setForInstance(Object entryObject, String fieldName, Object value) {if (entryObject == null) {return;}try {Field callField = entryObject.getClass().getDeclaredField(fieldName);callField.setAccessible(true);callField.set(entryObject, value);} catch (Exception e) {e.printStackTrace();}}}

測試

package org.common;import lombok.Data;@Data
public class Franchisee {private Integer id;private String name;}
package org.common;import java.util.ArrayList;
import java.util.List;
import java.util.Map;public class CollectorHelperTest {public static void main(String[] args) {List<Franchisee> dataList = new ArrayList<>();Franchisee franchisee1 = new Franchisee();franchisee1.setId(1);franchisee1.setName("Franchisee1");dataList.add(franchisee1);Franchisee franchisee2 = new Franchisee();franchisee2.setId(2);franchisee2.setName("Franchisee2");dataList.add(franchisee2);Franchisee franchisee3 = new Franchisee();franchisee3.setName("Franchisee3");dataList.add(franchisee3);Franchisee franchisee4 = new Franchisee();franchisee4.setName("Franchisee4");dataList.add(franchisee4);//Map<Integer, Franchisee> dataMap = CollectorHelper.toMap(dataList, "id");System.out.println("dataMap = " + dataMap);Map<Integer, Franchisee> dataMap2 = CollectorHelper.extractMap(dataList, "id");System.out.println("dataMap2 = " + dataMap2);//List<Integer> idList = CollectorHelper.toList(dataList, "id");System.out.println("idList = " + idList);idList.forEach(id -> {System.out.println("id = " + id);});List<Integer> idList2 = CollectorHelper.extractList(dataList, "id");System.out.println("idList2 = " + idList2);idList2.forEach(id -> {System.out.println("id = " + id);});}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88108.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88108.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88108.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ATE FT ChangeKit學習總結-20250630

目錄 一、基本概念 二、主要特點 三、BOM LIST Shuttle Hot Plate Dock Plate Contactor 四、設計要點 五、參考文獻與鏈接 一、基本概念 Change Kit在半導體封裝測試領域中是一個重要的組件,它作為Handler(自動化分類機)的配套治具,在芯片測試過程中發揮著關鍵作…

【網絡協議安全】任務14:路由器DHCP_AAA_TELNET配置

本文檔將詳細介紹在華為 eNSP 仿真環境中&#xff0c;實現路由器 DHCP 服務器功能、AAA 認證以及 TELNET 遠程登錄配置的完整步驟&#xff0c;適用于華為 VRP 系統路由器。 一、配置目標 路由器作為 DHCP 服務器&#xff0c;為局域網內的設備自動分配 IP 地址、子網掩碼、網關…

深度探索:現代翻譯技術的核心算法與實踐(第一篇)

引言:翻譯技術的演進之路 從早期的基于規則的機器翻譯(RBMT)到統計機器翻譯(SMT),再到如今主導行業的神經機器翻譯(NMT),翻譯技術已經走過了漫長的發展道路。現代翻譯系統不僅能夠處理簡單的句子,還能理解上下文、識別領域術語,甚至捕捉微妙的文化差異。 本系列文章將帶…

玩轉Docker | 使用Docker部署NotepadMX筆記應用程序

玩轉Docker | 使用Docker部署NotepadMX筆記應用程序 前言一、NotepadMX介紹工具簡介主要特點二、系統要求環境要求環境檢查Docker版本檢查檢查操作系統版本三、部署NotepadMX服務下載NotepadMX鏡像編輯部署文件創建容器檢查容器狀態檢查服務端口安全設置四、訪問NotepadMX服務訪…

Web前端:not(否定偽類選擇器)

not&#xff08;否定偽類選擇器&#xff09;CSS中的 :not() 選擇器是?個否定偽類選擇器&#xff0c;它?于選擇不符合給定選擇器的元素。這是?種排除特定元素的?法&#xff0c;可以?來簡 化復雜的選擇器&#xff0c;提? CSS 規則的靈活性和精確性。:not() 選擇器的基本語法…

【BTC】比特幣網絡

目錄 一、比特幣網絡架構 1.1 節點加入與離開 二、消息傳播方式 三、交易處理機制 四、網絡傳播問題 五、實際應用問題及解決 本章節講比特幣網絡的工作原理&#xff0c;講解新創建的區塊是如何在比特幣網絡中傳播的。 一、比特幣網絡架構 比特幣工作在應用層&#xff…

Clickhouse 的歷史發展過程

20.5.3 開始支持多線程20.6.3 支持explainmysql 20.8 實時同步mysql&#x1f4cc; ?一、早期版本階段&#xff08;1.1.x系列&#xff09;??版本范圍?&#xff1a;1.1.54245&#xff08;2017-07&#xff09;→ 1.1.54394&#xff08;2018-07&#xff09;?核心特性?&#x…

玩轉n8n工作流教程(一):Windows系統本地部署n8n自動化工作流(n8n中文漢化)

在Windows系統下使用 Docker 本地部署N8N中文版的具體操作&#xff0c;進行了詳盡闡述&#xff0c;玩轉n8n工作流教程系列內容旨在手把手助力從0開始一步一步深入學習n8n工作流。想研究n8n工作流自動化的小伙伴們可以加個關注一起學起來。后續也會持續分享n8n自動化工作流各種玩…

mini-program01の系統認識微信小程序開發

一、官方下載并安裝 1、下載&#xff08;I選了穩定版&#xff09; https://developers.weixin.qq.com/miniprogram/dev/devtools/download.htmlhttps://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 2、安裝&#xff08;A FEW MOMENT LATER&#xff09;…

如何將 Java 項目打包為可執行 JAR 文件

如何將 Java 項目打包為可執行 JAR 文件我將詳細介紹將 Java 項目打包為可執行 JAR 文件的完整流程&#xff0c;包括使用 IDE 和命令行兩種方法。方法一&#xff1a;使用 IntelliJ IDEA 打包步驟 1&#xff1a;配置項目結構打開項目點擊 File > Project Structure在 Project…

【Starrocks 異常解決】-- mysql flink sync to starrocks row error

1、異常信息 flink 1.20 starrocks 3.3.0 mysql 8.0 errorLog: Error: Target column count: 35 doesnt match source value column count: 28. Column separator: \t, Row delimiter: \n. Row: 2025-05-22 6 23400055 214 dssd 1 1 1928 mm2er 360 20000.00000000 1…

Jenkins 使用宿主機的Docker

背景&#xff1a;不想在Jenkins 內部安裝Docker,想直接使用Jenkins服務所在的系統安裝的docker當你在 Jenkins 中執行 docker 命令時&#xff0c;實際上是通過 Docker 客戶端與 Docker 守護進程進行通信。Docker 客戶端和守護進程之間的通信是通過一個名為 /var/run/docker.soc…

工具+服務雙驅動:創客匠人打造中醫IP差異化競爭力

一、技術工具場景化定制&#xff1a;中醫專業的可視化破圈在中醫IP同質化嚴重的行業現狀下&#xff0c;創客匠人以場景化技術工具破解專業傳播難題。系統內置的“體質測試”模塊可生成個性化調理報告&#xff0c;“案例庫”支持前后對比圖上傳&#xff0c;“直播問診”自動添加…

JVM對象分配內存如何保證線程安全?

大家好&#xff0c;我是鋒哥。今天分享關于【JVM對象分配內存如何保證線程安全&#xff1f;】面試題。希望對大家有幫助&#xff1b; JVM對象分配內存如何保證線程安全&#xff1f; 超硬核AI學習資料&#xff0c;現在永久免費了&#xff01; 在Java中&#xff0c;JVM&#xf…

機器學習中的數據對齊

文章目錄前言數據集怎么理解數據數據對齊為什么偏偏是這樣對齊&#xff1f;前言 在神經網絡中&#xff0c;我們往往會根據數據集構建訓練集、測試集&#xff0c;有時會有驗證集。但是&#xff0c;在構建完成后&#xff0c;如果直接將這些數據直接扔進模型訓練&#xff0c;輸入…

機器學習:更多分類回歸算法之決策樹、SVM、KNN

下面介紹的這幾種算法&#xff0c;既能用于回歸問題又能用于分類問題&#xff0c;接下來了解下吧。 決策樹 可參考&#xff1a; 決策樹&#xff08;Decision Tree&#xff09; | 菜鳥教程 決策樹&#xff08;Decision Tree&#xff09;是一種常用的監督學習算法&#xff0c;可用…

Vue 整合 Vue Flow:從零構建交互式流程圖

目錄引言目的適用場景環境準備基礎組件 (index.vue)自定義組件 (矩形、菱形等)RectangleNode.vue (矩形節點)&#xff1a;DiamondNode.vue (菱形節點)&#xff1a;ImageNode(自定義圖片節點):操作實現 (#操作實現) 拖拽節點 (#拖拽節點) 連線 (多連接點) 刪除節點 …

C# WPF - Prism 學習篇:搭建項目(一)

一、前期準備開發工具&#xff1a;Visual Studio 2022二、創建項目1、創建WPF 應用“WpfApp.StudyDemo”&#xff1a;2、項目結構如下&#xff1a; 三、安裝 Prism1、選中項目“WpfApp.PrismDemo”&#xff0c;在右鍵菜單中選擇“管理 NuGet 程序包(N)...”。2、在搜索框中輸入…

單片機 基于rt-thread 系統 使用 CCM內存

一、開發環境 開發板&#xff1a;野火stm32f407 系統&#xff1a;rt-thread V4.1.1 二、鏈接腳本配置 ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ****************************…

【UnityAssetBundle】AB包卸載資源

AB包的卸載高效穩定游戲開發的強制要求&#xff0c;它解決了資源管理中的內存泄漏問題&#xff0c;為動態的內容加載、熱更新、大型世界的構建提供了內存保障&#xff0c;最終提升了游戲性能、穩定性和用戶體驗。卸載資源方式一&#xff08;推薦使用&#xff09;&#xff1a;卸…