java8 List常用基本操作(去重,排序,轉換等)

參考簡述網址: java8 List 根據對象某個字段或多個字段去重、篩選、List轉Map、排序、分組、統計計數等等

list簡單方法示例如下:

一、先定義一個訂單對象(Order)

public class Order {private Long id;private Long userId;private String num;private String type;private Float allAmt;private Float payAmt;private Integer orderNum;public Order(Long id, Long userId, String num, String type, Float allAmt, Float payAmt, Integer orderNum) {this.id = id;this.userId = userId;this.num = num;this.type = type;this.allAmt = allAmt;this.payAmt = payAmt;this.orderNum = orderNum;}// getting...  setting...
}

二、過濾篩選:

  List<Order> orders = Lists.newArrayList();// 篩選總金額大于1000的訂單orders = orders.stream().filter(item -> item.getAllAmt() > 1000.00f).collect(Collectors.toList());

三、分組

  List<Order> orders = Lists.newArrayList();// 按照訂單類型分組Map<String, List<Order>> orderGroupMap = orders.stream().collect(Collectors.groupingBy(Order::getType));

四、去重

去重并排序參考TreeSet: java TreeSet去重與排序入門

去重: Java中List集合對象去重及按屬性去重

四、List 轉 Map

  List<Order> orders = Lists.newArrayList();// 將訂單集合轉換成訂單編號-應付金額 map,注意訂單編號作為 key 不能重復,應先做去重處理Map<String, Float> numPayMap = orders.stream().collect(Collectors.toMap(Order::getNum, Order::getPayAmt));// 用 id 做 key 將 List 轉成 MapMap<Long, Order> orderMap = orders.stream().collect(Collectors.toMap(Order::getId, item -> item));

五、排序

詳細看比較器排序: Java Comparator使用指南

 List<Order> orders = Lists.newArrayList();// 按照訂單總金額從高到低排序// 方式一orders.sort((o1, o2)-> o1.getAllAmt() == null ? 1 : (o2.getAllAmt() == null ? -1 : o2.getAllAmt().compareTo(o1.getAllAmt())));// 方式二orders.sort(Comparator.comparing(Order::getAllAmt, (o1, o2)-> o1 == null ? 1 : (o2 == null ? -1 : o2.compareTo(o1))));// 方式三 (allAmt 字段不能為 null, null 會導致排序失敗)orders.sort(Comparator.comparing(Order::getAllAmt).reversed());// 先按照訂單類型排序,再按照訂單應付金額從高到低排序orders.sort(Comparator.comparing(Order::getType, (o1, o2)-> o1 == null ? 1 : (o2 == null ? -1 : o1.compareTo(o2))).thenComparing((o1, o2)-> o1.getPayAmt() == null ? 1 : (o2.getPayAmt() == null ? -1 : o2.getPayAmt().compareTo(o1.getPayAmt()))));

六、統計計數

  List<Order> orders = Lists.newArrayList();// 統計所有訂單的總金額// 求和Double sum = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).sum();// 最大總金額OptionalDouble max = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).max();// 防止沒有訂單數據的處理Double maxAllAmt = max.isPresent() ? max.getAsDouble() : 0;// 最小總金額OptionalDouble min = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).min();// 平均總金額OptionalDouble average = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).average();

七、List 轉 List (返回另一個對象)

//聲明一個List集合 
List<Student> list = new ArrayList();list.add(new Student("1001", "小A"));list.add(new Student("1001", "小B"));list.add(new Student("1002", "小C"));list.add(new Student("1003", "小D"));//將List轉換List   【不過濾,不去重】 
List<Teacher> teacherList = list.stream().map(stu -> {Teacher teacher = new Teacher();teacher.setNo(stu.getNo());teacher.setName(stu.getName());return teacher;}).collect(Collectors.toList());//將List轉換List  【過濾,不去重】 
List<Teacher> teacherList2 =list.stream().filter( stu -> StringUtils.isNotBlank(stu.getName()) ).map(stu -> {Teacher teacher = new Teacher();teacher.setNo(stu.getNo());teacher.setName(stu.getName());return teacher;}).collect(Collectors.toList());

八、List 轉 List (返回另一個對象) (多重集合,取里面集合,并合并)

//聲明一個List集合
List<Student> list = new ArrayList();  list.add(new Student("1001", "小A"));  list.add(new Student("1001", "小B"));list.add(new Student("1002", "小C"));list.add(new Student("1003", "小D"));
List<Subject> subjectList = new ArrayList<>();Subject subject1 = new Subject();subject1.setId(1);subject1.setStudentList(studentList);subjectList.add(subject1);Subject subject2 = new Subject();subject1.setId(2);subject1.setStudentList(studentList);subjectList.add(subject2);Subject subject3 = new Subject();subject1.setId(3);subject1.setStudentList(studentList);subjectList.add(subject3);//將List轉換List 【flatMap取集合中的集合 再合并】  (本案例:把所有科目下的報名學生,取出來,并合并。注意:學生沒有去重)
List<Student> studentList =subjectList.stream().flatMap( item -> item.getStudentList().stream() ).collect(Collectors.toList());

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

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

相關文章

【linux】HAProxy七層代理

HAPorxy簡介HAProxy&#xff08;High Availability Proxy&#xff09;是一款高性能、開源的負載均衡器與反向代理服務器&#xff0c;主要用于 TCP 和 HTTP 協議的流量分發&#xff0c;廣泛應用于高并發、高可用的網絡架構中核心特性超高性能與低資源消耗基于單進程、多線程模型…

Android 的16 KB內存頁設備需要硬件支持嗎,還是只需要手機升級到Android15系統就可以

Android 的16 KB內存頁設備需要硬件支持嗎&#xff0c;還是只需要手機升級到Android15系統就可以&#xff1f; deepseek回答&#xff1a; DeepSeek R1 思考 3 秒 思考過程 好的&#xff0c;用戶現在問的是Android的16 KB內存頁設備是否需要硬件支持&#xff0c;還是只需要升級到…

相機內外參矩陣:從3D世界坐標到2D像素坐標變換

相機內外參矩陣&#xff1a;從3D世界坐標到2D像素坐標變換介紹**1. 內參矩陣&#xff08;Intrinsic Matrix, K&#xff09;****2. 外參矩陣&#xff08;Extrinsic Matrix, [R|t]&#xff09;****3. 完整投影過程&#xff08;世界坐標 → 像素坐標&#xff09;****步驟1&#xf…

哈希指針與數據結構:構建可信數字世界的基石

一、哈希指針的核心原理哈希指針是一種創新型數據結構&#xff0c;融合了傳統指針的定位功能與密碼學哈希的驗證能力&#xff1a;雙重功能&#xff1a;既存儲數據地址&#xff0c;又包含該數據的哈希值&#xff0c;實現數據定位與完整性驗證的統一。抗篡改機制&#xff1a;數據…

java實現一個方法,isTure則程序繼續往下,為false則return的鏈式寫法

以下是實現鏈式條件檢查的Java方法&#xff0c;采用函數式風格設計。代碼包含一個Chainable類&#xff0c;支持連續的check方法和多個終止操作&#xff08;如then, orElse等&#xff09;&#xff0c;滿足在條件為false時中斷鏈式調用并返回默認值的需求&#xff1a;import java…

數據結構學習之堆

本篇我們將學習新的數據結構——二叉樹。 作者的個人gitee&#xff1a;樓田莉子 (riko-lou-tian) - Gitee.com 目錄 樹的概念 樹形結構 非樹形結構 樹的相關術語 樹的表示 樹在實際生活上的應用 二叉樹 慢二叉樹 完全二叉樹 二叉樹的儲存結構 二叉樹的存儲結構 順序結構…

【csdn問答社區分析】前端開發熱點問題全解析

前端時間我在csdn問答社區的前端部分"視察”了一圈發現了大家的問題主要集中在以下方面一、框架與組件庫使用問題 Vue相關問題 組件化開發&#xff1a;如avue-crud組件自定義樣式不生效、el-select大數據分頁懶加載、element-plus表格動態列校驗等。功能實現&#xff1a;包…

Pycharm2025 安裝教程 免費分享 沒任何套路

Pycharm 安裝也是很簡單的&#xff0c;簡單過一下流程&#xff0c;如果需要的可以轉存下載到自己電腦上。我用夸克網盤分享了「pycharm2025」&#xff0c;復制鏈接瀏覽器打開轉存后即可下載。鏈接&#xff1a;https://pan.quark.cn/s/4bb74a939332備注&#xff1a;附帶2023-202…

Javaweb————什么是超文本傳輸協議?

&#x1f3cd;?&#x1f3cd;?&#x1f3cd;?引言&#xff1a;什么是協議&#xff1f; 協議是一種約定&#xff0c;規定好一種信息的格式&#xff0c;如果發送方按照這種請求格式發送信息,那么接 收端就要按照這樣的格式解析數據,否則就會出錯&#xff0c;這就是協議 常用協…

UniappDay03

1.熱門推薦-準備工作// 用defineProps獲取頁面參數,query const query defineProps<{type: string }>() const currHot hotMap.find((v) > v.type query.type) // 動態設置標題 uni.setNavigationBarTitle({ title: currHot!.title }) </script>2.獲取熱門推…

基于動態增強的 LLM 置信度方法研究

基于動態增強的 LLM 置信度方法研究 一、引言(Introduction) 大型語言模型(LLM)的性能提升高度依賴于對模型內部表征的精準調控 —— 表征工程通過優化模型中間層隱藏狀態的傳遞規律,能夠在不改變模型參數的前提下顯著提升任務適應性(Wei et al., 2022)。當前主流方法中…

ComfyUI中運行Wan 2.1工作流,電影級視頻,兼容Mac Windows

魔當(LM Downloader)是一個大模型應用下載工具 &#xff0c;目前 魔當 已經支持ComfyUI下載Wan 2.1視頻模型。 魔當下載地址 https://seemts.com/ 先看生成效果 原始圖片&#xff0c;你可以保存到自己電腦上測試 生成視頻&#xff1a; 推薦提示詞&#xff1a; A futurist…

CentOS 7 Linux 用 yum 安裝 Docker,含 Docker 鏡像無法拉取問題(即 docker pull 失敗)的解決方案

CentOS 7 Linux 用 yum 安裝 Docker,含 Docker 鏡像無法拉取問題(即 docker pull 失敗)的解決方案 本文對應的講解視頻鏈接:https://www.bilibili.com/video/BV1C48wzqE6T/ 文章目錄 CentOS 7 Linux 用 yum 安裝 Docker,含 Docker 鏡像無法拉取問題(即 docker pull 失敗…

XML的簡略知識點

文章目錄1. 基本概念2. 基本語法3. 示例4. 相關技術5. 應用場景XML&#xff08;可擴展標記語言&#xff09;是一種用于存儲和傳輸數據的標記語言&#xff0c;核心特點是可擴展性和自我描述性。以下是其核心知識點&#xff1a; 1. 基本概念 用途&#xff1a;主要用于數據的存儲…

RustDesk 完整部署教程:支持 Web 管理后臺和網頁客戶端遠程,保姆級教學來了!

RustDesk API本項目使用 Go 實現了 RustDesk 的 API&#xff0c;并包含了 Web Admin 和 Web 客戶端。RustDesk是一個遠程桌面軟件&#xff0c;提供了自托管的解決方案&#xff0c;官方API是收費的&#xff0c;這次咱們用到的是Github開源的第三方API源碼。?特性PC端API支持 …

??GOFLY LIVE CHAT:Golang製オープンソース?ライブチャットシステム?

以下是為日本技術受眾優化的日語版介紹文章&#xff0c;采用IT行業慣用術語和簡潔表達&#xff1a; ??GOFLY LIVE CHAT&#xff1a;Golang製オープンソース?ライブチャットシステム?? ??現代的なカスタマーサポートのための高性能ソリューション?? GOFLY LIVE CHATは…

ISIS GR實驗案例

一、實驗拓撲路由器R1和R2都為雙主控設備&#xff0c;主用板和備用板間形成備份關系。路由器間通過IS-IS協議實現網絡互連&#xff0c;并提供GR機制。要求當R1通過GR方式重啟IS-IS進程或者進行主備倒換時轉發不中斷。1、基礎配置AR1 system sysname AR1 int g 0/0/0 ip add 10.…

智慧農業病蟲害識別準確率↑32%:陌訊多模態融合算法實戰解析

原創聲明本文為原創技術解析&#xff0c;核心技術參數與架構設計引用自《陌訊技術白皮書》&#xff0c;禁止未經授權的轉載與篡改。一、行業痛點&#xff1a;智慧農業的識別困境智慧農業中&#xff0c;作物病蟲害的精準識別是實現精準植保的核心&#xff0c;但田間復雜環境始終…

# JsSIP 從入門到實戰:構建你的第一個 Web 電話

前言 歡迎來到實時通信&#xff08;Real-Time Communication, RTC&#xff09;的世界&#xff01;如果你是一名 JavaScript 開發者&#xff0c;渴望讓你的 Web 應用擁有語音通話、視頻聊天甚至即時消息的能力&#xff0c;那么你來對地方了。這本書是為你量身打造的指南&#x…

【RHCSA 問答題】第 12 章 安裝和更新軟件包

目錄什么是 RPM&#xff1f;dnf 是什么&#xff0c;它和 rpm 有什么聯系和區別&#xff1f;如何設置禁止直接遠程登錄 root 賬戶&#xff1f;RHEL 中如何做才能啟用對第三方存儲庫的支持&#xff1f;怎么理解 RHEL9 中的應用流(Application Streams)和模塊(Modules)&#xff1f…