【精品】集合list去重

示例一:對于簡單類型,比如String

    public static void main(String[] args) {List<String> list = new ArrayList< >();list.add("aaa");list.add("bbb");list.add("bbb");list.add("ccc");list.add("abc");list.add("abc");list.add("abd");list.add("cba");list.add("cba");for (String s : list) {System.out.print(s+"\t");}System.out.println("\n-----------------");//方法一:利用Set去重Set<String> set = new HashSet< >();set.addAll(list);for (String s : set) {System.out.print(s+"\t");}System.out.println("\n-----------------");//方法二:利用TreeSet集合特性排序+去重:TreeSet可以將字符串類型的數據按照字典順序進行排序,首字母相同則看第二位List<String> list2 = new ArrayList<>(new TreeSet<>(list));for (String s : list2) {System.out.print(s+"\t");}System.out.println("\n-----------------");//方法三:LinkedHashSet雖然可以去重,但是根據他的特性,他不能對數據進行排序,只能維持原來插入時的秩序List<String> list3 = new ArrayList<>(new LinkedHashSet<>(list));for (String s : list3) {System.out.print(s+"\t");}System.out.println("\n-----------------");//方法四:用list.contains()的方法進行判斷,然后將其添加到新的list當中,元素的順序不發生改變List<String> list4 = new ArrayList<>();for (String item : list) {if (!list4.contains(item)) {list4.add(item);}}for (String s : list4) {System.out.print(s+"\t");}System.out.println("\n-----------------");//方法五:使用Java8特性去重:把list集合->Stream流,然后對流用distinct()去重,再用collect()收集List<String> list5 = list.stream().distinct().collect(Collectors.toList());for (String s : list5) {System.out.print(s+"\t");}System.out.println("\n-----------------");//方法六:使用list自身方法remove():將同一個list用兩層for循環配合.equals()方法,有相同的就用remove()方法剔除掉,然后得到一個沒有重復數據的listfor (int i = 0; i < list.size()-1; i++) {for (int j = list.size()-1; j >i; j--) {if(list.get(i).equals(list.get(j))){list.remove(j);}}}for (String s : list) {System.out.print(s+"\t");}}

結果:
在這里插入圖片描述

示例二:對于復雜類型,根據指定屬性去重

測試代碼:

public static void main(String[] args) {List<Dept> depts = new ArrayList<>();depts.add(new Dept(10, "ACCOUNTING", "NEWYORK"));depts.add(new Dept(20, "RESEARCH", "DALLAS"));depts.add(new Dept(20, "RESEARCH", "DALLAS"));depts.add(new Dept(30, "SALES", "CHICAGO"));depts.add(new Dept(30, "SALES", "CHICAGO"));depts.add(new Dept(30, "OPERATIONS", "BOSTON"));//方法一:List<Dept> res = depts.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Dept::getDeptno))), ArrayList::new));res.forEach(System.out::println);//方法二:List<Integer> deptnoList = new ArrayList<>();List<Dept> res2 = depts.stream().filter(item -> {boolean flag = !deptnoList.contains(item.getDeptno());deptnoList.add(item.getDeptno());return flag;}).collect(Collectors.toList());res2.forEach(System.out::println);}

結果:

在這里插入圖片描述

示例三:對于復雜類型,根據指定屬性去重(建議?????)

public class DemoTest {public static void main(String[] args) {List<Dept> depts = new ArrayList<>();depts.add(new Dept(10, "ACCOUNTING", "NEWYORK"));depts.add(new Dept(20, "RESEARCH", "DALLAS"));depts.add(new Dept(20, "RESEARCH", "DALLAS"));depts.add(new Dept(30, "SALES", "CHICAGO"));depts.add(new Dept(30, "SALES", "CHICAGO"));depts.add(new Dept(30, "OPERATIONS", "BOSTON"));//filter參數為true則保留depts.stream().filter(distinctByKey(Dept::getDeptno)).forEach(System.out::println);}private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {Map<Object,Boolean> seen = new ConcurrentHashMap<>();//putIfAbsent方法添加鍵值對,如果map集合中沒有該key對應的值,則直接添加,并返回null,如果已經存在對應的值,則依舊為原來的值。//如果返回null表示添加數據成功(不重復),不重復(null==null :TRUE)return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;}}

結果:
在這里插入圖片描述

示例四:對于復雜類型,根據指定屬性去重

    public static void main(String[] args) {List<Dept> depts = new ArrayList<>();depts.add(new Dept(10, "ACCOUNTING", "NEWYORK"));depts.add(new Dept(20, "RESEARCH", "DALLAS"));depts.add(new Dept(20, "RESEARCH", "DALLAS"));depts.add(new Dept(30, "SALES", "CHICAGO"));depts.add(new Dept(30, "SALES", "CHICAGO"));depts.add(new Dept(30, "OPERATIONS", "BOSTON"));final List<Dept> res = depts.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Dept::getDeptno))), ArrayList::new));res.forEach(System.out::println);}

結果:
在這里插入圖片描述

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

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

相關文章

網絡工程師必備的網絡端口大全(建議收藏)

端口是一種數字標識&#xff0c;用于在計算機網絡中進行通信&#xff0c;你完全可以把端口簡單的理解為是計算機和外界通訊交流的出口。但在網絡技術中&#xff0c;端口一般有兩種含義&#xff1a; &#xff08;1&#xff09;硬件設備中的端口 如交換機、路由器中用于鏈接其他…

用stream流將list轉為map

用stream流將list轉為map 1、將list轉為Map<Long, List> 按照spaceId分組&#xff0c;spaceId相同的為一組數據&#xff1a; List<BasEvaluationPriceResultDto> list new ArrayList(); Map<Long, List<BasEvaluationPriceResultDto>> priceResult…

“金三銀四”招聘季,大廠爭招鴻蒙人才

在金三銀四的招聘季中&#xff0c;各大知名互聯網企業紛紛加入了對鴻蒙人才的爭奪戰。近日&#xff0c;包括淘寶、京東、得物等在內的知名APP均宣布啟動鴻蒙星河版原生應用開發計劃。這一舉措不僅彰顯了鴻蒙生態系統的迅猛發展&#xff0c;還催生了人才市場的繁榮景象。據數據顯…

遙感影像處理(ENVI+ChatGPT+python+ GEE)處理高光譜及多光譜遙感數據

遙感技術主要通過衛星和飛機從遠處觀察和測量我們的環境&#xff0c;是理解和監測地球物理、化學和生物系統的基石。ChatGPT是由OpenAI開發的最先進的語言模型&#xff0c;在理解和生成人類語言方面表現出了非凡的能力。本文重點介紹ChatGPT在遙感中的應用&#xff0c;人工智能…

vue3學習 【4】ref和reactive的使用并于ts結合

使用ref聲明一個響應式對象并使用 <script lang"ts" setup> import { ref } from vue; const message ref("HelloWorld") message.value"被修改了啊~~" </script> <template>{{ message }} </template>ref() 接收參數…

Vue——攜帶參數跳轉路由

Vue學習之——跳轉路由 前情回顧 當我們進行點擊修改時&#xff0c;會進行跳轉到修改頁面&#xff0c;為了完成回顯數據&#xff08;根據對應id查找&#xff09;&#xff0c;我們需要攜帶對應選擇中的id跳轉到修改頁面&#xff0c;讓其進行查找回顯 學習useRoute和useRoute…

webstorm2023.3.4安裝與破解

WebStorm安裝步驟 打開JetBrains官方網站&#xff08;https://www.jetbrains.com/webstorm/&#xff09; 運行.exe 選擇安裝路徑 第一個意思是是否創建桌面快捷方式&#xff0c;可根據需要選擇&#xff1b;第二個.js .css .html勾選后之后js css html文件默認會用webstor…

AI Agent

目錄 一、什么是Agent 二、什么是MetaGPT【多智能體框架介紹】 三、MetaGPT的背景 一、什么是Agent 智能體 LLM觀察思考行動記憶 Agent&#xff08;智能體&#xff09; 一個設置了一些目標或任務&#xff0c;可以迭代運行的大型語言模型。這與大型語言模型&#xff08;LLM&am…

985機械研一轉碼,java還是c++?

985機械研一轉碼&#xff0c;java還是c&#xff1f; 在開始前我分享下我的經歷&#xff0c;我剛入行時遇到一個好公司和師父&#xff0c;給了我機會&#xff0c;一年時間從3k薪資漲到18k的&#xff0c; 我師父給了一些 電氣工程師學習方法和資料&#xff0c;讓我不斷提升自己&…

一鍵下載電路(for STM32 and mcuisp)

一鍵下載電路 1. STM32 一鍵下載電路2. 燒錄軟件&#xff1a;mcuisp和FlyMcu下載3. 遇到問題 1. STM32 一鍵下載電路 博文連接 2. 燒錄軟件&#xff1a;mcuisp和FlyMcu下載 mcuisp和FlyMcu下載 3. 遇到問題 按如上博文電路設計&#xff0c;上電發現程序沒有進入 main() 函…

【OpenGL的著色器03】內置變量(gl_Position等)

目錄 一、說明 二、著色器的變量 2.1 著色器變量 2.2 著色器內置變量 三、最常見內置變量使用范例 3.1 常見著色器變量 3.2 示例1&#xff1a; gl_PointSize 3.3 示例2&#xff1a;gl_Position 3.4 gl_FragColor 3.5 渲染點片元坐標gl_PointCoord 3.6 gl_PointCoo…

【PyTorch][chapter 20][李宏毅深度學習]【無監督學習][ GAN]【實戰】

前言 本篇主要是結合手寫數字例子,結合PyTorch 介紹一下Gan 實戰 第一輪訓練效果 第20輪訓練效果,已經可以生成數字了 68 輪 目錄&#xff1a; 谷歌云服務器&#xff08;Google Colab&#xff09; 整體訓練流程 Python 代碼 一 谷歌云服務器&#xff08;Google Colab&…

Linux學習-字符串數組和字符串

目錄 使用場景 字符型數組定義&#xff1a; 初始化 數組儲存 打印 字符型數組常見函數 常見操作 strcpy&#xff1a;字符串拷貝 strcat&#xff08;str1&#xff0c;str2&#xff09;字符串拼接 strcmp&#xff1a;字符串比較 注意&#xff1a; 二維字符型數…

Open CASCADE學習|曲線曲面連續性

1、曲線的連續性 曲線的連續性是三維建模、動畫設計等領域中非常重要的一個概念&#xff0c;它涉及到曲線在不同點之間的連接方式和光滑程度。下面將詳細介紹曲線的連續性&#xff0c;包括C連續性和G連續性。 1.1C連續性&#xff08;參數連續性&#xff09; C連續性是指曲線…

使用MyBatisPlus實現向數據庫中存儲List類型的數據

使用MyBatisPlus實現向數據庫中存儲List類型的數據 問題描述 建表時&#xff0c;表中的這五個字段為json類型 但是在入庫的時候既不能寫入數據&#xff0c;也不能查詢出數據。 解決方案&#xff1a; 1.首先明確&#xff0c;數據存入的時候是經過了數據類型轉化&#xff0c…

中國電子學會2020年06月真題C語言軟件編程等級考試三級(含詳細解析答案)

中國電子學會考評中心歷屆真題&#xff08;含解析答案&#xff09; C語言軟件編程等級考試三級 2020年06月 編程題五道 總分:100分一、最接近的分數&#xff08;20分&#xff09; 分母不超過N且小于A/B的最大最簡分數是多少? 時間限制: 1000ms 內存限制: 65536kb 輸入…

數據之光:探索數據庫技術的演進之路

?? 歡迎大家來訪Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭?&#xff5e;?? &#x1f31f;&#x1f31f; 歡迎各位親愛的讀者&#xff0c;感謝你們抽出寶貴的時間來閱讀我的文章。 我是Srlua&#xff0c;在這里我會分享我的知識和經驗。&#x…

喜訊!持安科技CEO何藝獲評安全419《2023年度十大優秀創業者》

近日&#xff0c;由網絡安全產業資訊媒體安全419主辦的《年度策劃》2023年度十大優秀創業者正式出爐&#xff0c;零信任辦公安全技術創新企業持安科技創始人兼CEO何藝&#xff0c;獲評十大優秀創業者。 這是安全419第二屆推出該項目的評選活動&#xff0c;安全419編輯老師在多年…

抽象類、模板方法模式

抽象類概述 在Java中abstract是抽象的意思&#xff0c;如果一個類中的某個方法的具體實現不能確定&#xff0c;就可以申明成abstract修飾的抽象方法&#xff08;不能寫方法體了&#xff09;&#xff0c;這個類必須用abstract修飾&#xff0c;被稱為抽象類。 抽象方法定義&…

【解決】修改 UI界面渲染層級 的常見誤區

開發平臺&#xff1a;Unity 2021版本 ? 問題描述 Unity 中管理 UI 上顯示元素的前后層級關系大致為以下兩種方式&#xff1a; 方式一&#xff1a;修改UI元素隊列順序與層級方式二&#xff1a;使用 Canvas 組件中的 Override Sort 屬性配置 方式二 對應復雜的 UI 層級關系將常…