Java集合去重

? 方式一:TreeSet + Comparator

最優雅的一種,適用于對象中某個字段唯一的去重(如 partyAId

List<PartyACompanyVO> result = contractDOS.stream().map(contract -> {PartyACompanyVO vo = new PartyACompanyVO();vo.setPartyAId(contract.getPartyAId());vo.setPartyA(contract.getPartyA());return vo;}).collect(Collectors.collectingAndThen(Collectors.toCollection(() ->new TreeSet<>(Comparator.comparing(PartyACompanyVO::getPartyAId))),ArrayList::new));

?? 方式二:用 Map 去重(適合多字段判斷)

以某字段為 keyMap,保留第一個值

List<PartyACompanyVO> result = contractDOS.stream().map(contract -> {PartyACompanyVO vo = new PartyACompanyVO();vo.setPartyAId(contract.getPartyAId());vo.setPartyA(contract.getPartyA());return vo;}).collect(Collectors.toMap(PartyACompanyVO::getPartyAId, // 唯一鍵字段Function.identity(),(existing, replacement) -> existing // 保留第一個)).values().stream().collect(Collectors.toList());

?

?

? 這一段確實返回的是一個 Map<String, PartyACompanyVO>partyAId 作為 key,對象本身作為 value,并且會對重復 key 進行處理(保留第一個或最后一個)。?

?

?

?

步驟操作目的
.collect(Collectors.toMap(...))生成 Map,自動去重(key 是 partyAId
.values()取出所有值(PartyACompanyVO 對象)
.stream()轉換為流
.collect(Collectors.toList())變成最終的 List

?

  • Function.identity():返回對象本身。

  • .values().stream():從 Map 拿到去重后的對象,再轉回 List。

?

? 方式三:用 distinct() + 重寫 equals & hashCode

適合對象整體去重

首先你要重寫 PartyACompanyVO

@Data
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class PartyACompanyVO {@EqualsAndHashCode.Includeprivate String partyAId;private String partyA;
}
List<PartyACompanyVO> result = contractDOS.stream().map(contract -> {PartyACompanyVO vo = new PartyACompanyVO();vo.setPartyAId(contract.getPartyAId());vo.setPartyA(contract.getPartyA());return vo;}).distinct().collect(Collectors.toList());

? 方式四:使用臨時 Set 去重(簡單直接)

Set<String> seen = new HashSet<>();
List<PartyACompanyVO> result = contractDOS.stream().map(contract -> {PartyACompanyVO vo = new PartyACompanyVO();vo.setPartyAId(contract.getPartyAId());vo.setPartyA(contract.getPartyA());return vo;}).filter(vo -> seen.add(vo.getPartyAId())) // 如果添加失敗說明已存在.collect(Collectors.toList());

總結

場景推薦方式
單字段去重,簡潔優雅? 方式一(TreeSet + Comparator
需要 Map 結構或復雜合并邏輯? 方式二(Map 去重)
已有完整對象定義且支持 .equals()? 方式三(重寫 equals + distinct()
簡單過濾,臨時處理? 方式四(手動 Set

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

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

相關文章

Qt字符串處理與正則表達式應用

一、Qt字符串處理基礎 在Qt應用程序開發中&#xff0c;字符串處理是一項常見且重要的任務。Qt提供了強大而靈活的字符串處理功能&#xff0c;能夠滿足各種復雜的文本處理需求。 1.1 QString類概述 QString是Qt中處理字符串的核心類&#xff0c;它基于Unicode編碼&#xff0c…

qt5靜態版本對應的pcre編譯

下載 https://sourceforge.net/projects/pcre/files/pcre/8.45/ 不同版本qt對應不同pcre 編譯 啟動vs2013的開發人員命令&#xff0c;可以找到cl程序 nmake環境設置到系統path中 cd C:\pcre-8.45 mkdir build_static cd build_static cmake .. -G "NMake Makefiles" …

JimuReport 積木報表 v2.1.1 版本發布,免費開源的報表和大屏

項目介紹 積木報表&#xff0c;是一款免費的數據可視化報表&#xff0c;含報表、打印、大屏和儀表盤&#xff0c;像搭建積木一樣完全在線設計&#xff01;功能涵蓋&#xff1a;復雜報表、打印設計、圖表報表、門戶設計、大屏設計等&#xff01; 分兩大模塊&#xff1a;JimuRepo…

基于python django的農業可視化系統,以奶牛牧場為例

摘 要 本文課題圍繞畜牧業高質量發展中牧場管理的現狀&#xff0c;現代牧場飼養模式上存在的數據比較零碎、飼養過程中容易經驗主義、生產產量不穩、產出效益低、奶牛體況的不合理等現狀&#xff0c;設計了多參數大數據智能牧場生產管理決策支撐體系。以牧場信息系統的建設為背…

無人機吊艙與遙控器匹配技術解析

一、 無人機吊艙如何與遙控器“對上暗號”&#xff1f;在無人機執行物資投送、電力巡檢、災害搜救等任務時&#xff0c;吊艙&#xff08;即懸掛于機身下方的任務設備&#xff09;常成為核心作業單元。但要讓遙控器“指揮”吊艙&#xff0c;兩者必須實現雙向通信協議互通、電氣接…

C#模擬pacs系統接收并解析影像設備數據(DICOM文件解析)

上篇文件介紹了什么dicomhttps://blog.csdn.net/qq_39569480/article/details/149641920?spm=1001.2014.3001.5502 本篇文章我們來使用fo_dicom接收并解析dicom文件。 文章結尾附源碼。 1.開發環境 visual studio 2019 .netframwork 4.8 2.關鍵知識點 dicom三要素為 AE t…

在 IntelliJ IDEA 中打開這個用于設置 Git 用戶名(Name)和郵箱(Email)的特定彈窗

要在 IntelliJ IDEA 中打開這個用于設置 Git 用戶名&#xff08;Name&#xff09;和郵箱&#xff08;Email&#xff09;的特定彈窗&#xff08;如下圖&#xff09;&#xff0c;可以通過以下幾種常見方法觸發&#xff1a;https://i.im.ge/2024/07/16/Kt6r1i.IDE-Git-UserName-Co…

redis 源碼閱讀

官網下載zip&#xff1a; 本文即是文件創建時間時候的版本~ 文章目錄目錄結構/srcint main()服務端 server足夠的熵值 entropyumask掩碼系統初始化*重啟機制&#xff1a;保存執行數據 以便后續重啟服務哨兵模式 sentinelrdb aof解析命令行參數聲明實現的位置目錄結構 目錄/文…

《C++》面向對象編程--類(下)

文章目錄一、賦值運算符重載1.1定義1.2基本規則1.3為什么需要運算符重載&#xff1f;1.4示例&#xff1a;二、前置和后置區別2.1前置的實現與特點2.2后置的實現與特點2.3核心區別三、const四、取地址及const取地址操作符重載4.1定義4.2語法4.3注意事項一、賦值運算符重載 1.1定…

EasyExcel 模板導出數據 + 自定義策略(合并單元格)

需求&#xff1a;數據庫里的主表明細表&#xff0c;聯查出數據并導出Excel&#xff0c;合并主表數據的單元格。代碼&#xff1a;controllerPostMapping("export")ApiOperation(value "導出數據")protected void export(ApiParam Valid RequestBody NewWms…

股指期權可以隨時平倉嗎?

本文主要介紹股指期權可以隨時平倉嗎&#xff1f;股指期權是否可以隨時平倉&#xff0c;需結合交易規則、合約狀態及市場流動性綜合判斷&#xff0c;具體如下。股指期權可以隨時平倉嗎&#xff1f;一、正常交易時間內的平倉規則在交易日的交易時段內&#xff08;如國內上證50ET…

成品電池綜合測試儀:保障電池品質與安全的核心工具|深圳鑫達能

隨著新能源汽車、儲能系統、消費電子等領域的快速發展&#xff0c;電池作為核心能源組件&#xff0c;其性能與安全性直接關系到產品的整體質量與用戶體驗。成品電池綜合測試儀作為電池生產與質檢環節的關鍵設備&#xff0c;通過模擬真實使用場景&#xff0c;對電池的電氣性能、…

智慧工廠網絡升級:新型 SD-WAN 技術架構與應用解析

1. 智慧工廠對網絡的核心需求智慧工廠的網絡需求高度復雜&#xff0c;主要體現在以下幾個方面&#xff1a;高可靠性與低延遲工廠中的生產執行系統&#xff08;MES&#xff09;、設備監控系統&#xff08;如 PLC/SCADA&#xff09;、產品生命周期管理系統&#xff08;PLM&#x…

在 Windows 使用 Nginx/HAProxy 實現負載均衡

在本實驗中&#xff0c;我們將在 Windows 系統 上使用 Python 編寫一個 TCP 服務器&#xff0c;并啟動兩個服務實例。然后使用 Nginx 或 HAProxy 作為負載均衡器&#xff0c;將來自多個客戶端的請求分發到這兩個服務實例上&#xff0c;驗證負載均衡效果。 &#x1f9e9; 環境準…

【物聯網】基于樹莓派的物聯網開發【17】——物聯網通信協議MQTT基礎知識

使用背景 MQTT最初是為了解決物聯網&#xff08;IoT&#xff09;領域設備之間的低帶寬、高延遲、不穩定網絡連接等問題而設計的。 場景介紹 廣泛應用物聯網領域&#xff0c;數據實時傳輸&#xff0c;連接各種智能設備和應用的關鍵橋梁 MQTT簡介和概述 MQTT&#xff08;Message …

【qml-3】qml與c++交互第二次嘗試(類型方式)

背景&#xff1a; 【qml-1】qml與c交互第一次嘗試&#xff08;實例方式&#xff09; 【qml-2】嘗試一個有模式的qml彈窗-CSDN博客 【qml-3】qml與c交互第二次嘗試&#xff08;類型方式&#xff09; 還是qml學習筆記。 這次擱置太久了。其實不太會&#xff0c;還是以教程為主…

輸電線路觀冰精靈在線監測裝置:科技賦能電網安全的新利器

一、技術架構與工作原理輸電線路觀冰精靈在線監測裝置&#xff08;簡稱“觀冰精靈”&#xff09;是一款集成多源感知、智能分析、遠程通信于一體的專業化覆冰監測設備。其核心功能通過以下技術路徑實現&#xff1a;1. 數據采集模塊視覺識別系統&#xff1a;搭載工業級夜視攝像機…

Ubuntu22 上,用C++ gSoap 創建一個簡單的webservice

創建calc.h// calc.h // gSOAP 服務定義 int ns__add(double a, double b, double &result); int ns__subtract(double a, double b, double &result);創建my_server.cpp#include "soapService.h" #include "ns.nsmap" class MyService : public S…

Java(LinkedList和ArrayList底層分析)

LinkedList全面說明:LinkedList底層操作機制:LinkedList的方法:add():增加節點對象remove():刪除一個節點對象(默認刪除第一個節點對象)set():修改一個節點對象get():得到一個節點對象LinkedList的遍歷:增強for循環迭代器普通for循化LinkedList的源碼解讀:增加源碼:1. LinkedLi…

開源項目XBuilder的user邏輯

stores \ userquery-keys.ts 統一管理Vue Query&#xff08;TanStack Query的Vue適配版本&#xff09;緩存鍵&#xff0c;在下面的文件中復用index.ts 入口文件&#xff0c;統一用戶信息查詢signed-in.ts 登錄狀態管理、認證邏輯在用戶登錄后&#xff0c;系統頒發一個令牌&…