stream流的toMap

假設有這么一個類:

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;public class Student {private int id;private String name;public Student(int id, String name) {this.id = id;this.name = name;}public Student() {}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +'}';}

使用stream流來將list轉map

  public void test(){List<Student> list = Arrays.asList(new Student(1, "張三" ),new Student(2, "李四"),new Student(3, "趙武" ),new Student(4, "王六" ));/***  key: id*value : name*/Map<Integer, String> collect = list.stream().collect(Collectors.toMap(Student::getId, Student::getName));System.out.println(collect);/*** key :id* value: student*/Map<Integer, Student> collect1 = list.stream().collect(Collectors.toMap(Student::getId, v -> v));System.out.println(collect1);/*** key :id* value: student*  但是這種情況是有重復的key 的情況下*/List<Student> list2 = Arrays.asList(new Student(1, "張三" ),new Student(2, "李四"),new Student(3, "趙武" ),new Student(1, "王六" ));
//        //這種會報錯
//        Map<Integer, String> collect2 = list2.stream()
//                .collect(Collectors.toMap(Student::getId, Student::getName));
//        System.out.println(collect2);//稍微處理一下重復的key的問題HashMap<Integer, String> collect3 = list2.stream().collect(Collectors.toMap(Student::getId, Student::getName, (n1, n2) -> n2, HashMap::new));System.out.println(collect3);}

運行結果如下:

{1=張三, 2=李四, 3=趙武, 4=王六}
{1=Student{id=1, name='張三'}, 2=Student{id=2, name='李四'}, 3=Student{id=3, name='趙武'}, 4=Student{id=4, name='王六'}}
{1=王六, 2=李四, 3=趙武}

源碼:

    public static <T, K, U>Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,Function<? super T, ? extends U> valueMapper) {return toMap(keyMapper, valueMapper, throwingMerger(), HashMap::new);}

這種沒有對key重復的時候做處理,在實際開發中肯定會考慮導key是否重復的場景;

下面這種方式可以將處理后的數據返回到一個新的map(指定的容器)之中

    public static <T, K, U, M extends Map<K, U>>Collector<T, ?, M> toMap(Function<? super T, ? extends K> keyMapper,Function<? super T, ? extends U> valueMapper,BinaryOperator<U> mergeFunction,Supplier<M> mapSupplier) {BiConsumer<M, T> accumulator= (map, element) -> map.merge(keyMapper.apply(element),valueMapper.apply(element), mergeFunction);return new CollectorImpl<>(mapSupplier, accumulator, mapMerger(mergeFunction), CH_ID);}

并行流:


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

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

相關文章

html + css 淘寶網實戰

之前有小伙伴說&#xff0c;淘寶那么牛逼你會寫代碼&#xff0c;能幫我做一個一樣的淘寶網站嗎&#xff0c;好呀&#xff0c;看我接下來如何給你做一個淘寶首頁。hahh,開個玩笑。。。學習而已。 在進行html css編寫之前 先了解下網頁的組成和網頁元素的尺寸吧 1.網頁的組成 …

神經網絡、深度學習、卷積神經網絡

好的&#xff01;我會盡量詳細且易懂地為你解釋這些概念&#xff0c;并在最后用簡單直白的語言總結一下。 1. 神經網絡思想 神經網絡是靈感來自于生物大腦神經元的工作原理&#xff0c;是一種模仿人類大腦處理信息的方式來設計的數學模型。我們的大腦由億萬個神經元組成&…

設計模式01:創建型設計模式之單例、簡單工廠的使用情景及其基礎Demo

一、單例模式 1.情景 連接字符串管理 2.好處 代碼簡潔&#xff1a;可全局訪問連接字符串。性能優化&#xff1a;一個程序一個連接實例&#xff0c;避免反復創建對象&#xff08;連接&#xff09;和銷毀對象&#xff08;連接&#xff09;。線程安全&#xff1a;連接對象不會…

【不太正常的題】LeetCode.232:用棧的函數接口實現隊列

&#x1f381;個人主頁&#xff1a;我們的五年 &#x1f50d;系列專欄&#xff1a;初階數據結構刷題 &#x1f389;歡迎大家點贊&#x1f44d;評論&#x1f4dd;收藏?文章 &#x1f697; 1.問題描述&#xff1a; 題目中說了只能使用兩個棧實現隊列&#xff0c;并且只能使用…

Linux搭建text-generation-webui框架,安裝通義千問大模型,開放對外api,voxta測試對話圖文教程

目錄 text-generation-webui部分 開放對外API 通義千問部分 遠程API對話測試部分 text-generation-webui部分 本來不想發這個文章的&#xff0c;但是自己部署的時候看了挺多人的帖子&#xff0c;很多發的不全面&#xff0c;要么就是跟著他們流程走有些小問題啥的&#xff…

QT程序發布后,mysql在其它電腦設備無法連接數據庫

QT程序發布后&#xff0c;mysql在其它電腦設備無法連接數據庫 D:\mysql-5.7.24-winx64\lib, mysql-5.7.24-winx64是一個壓縮包&#xff0c;用于啟動mysql服務&#xff0c;創建數據庫 壓縮包 解決方法&#xff1a; 拷貝庫到exe的相同目錄&#xff0c;libmysql.dll,libmysql.li…

ElasticSearch 的核心功能

要深入理解 ElasticSearch 的核心功能&#xff0c;需要全面掌握其 全文搜索、分析、聚合 和 索引生命周期管理&#xff08;ILM&#xff09; 的設計原理和實際應用。 1. 全文搜索 ElasticSearch 的全文搜索是其核心功能之一&#xff0c;依賴于倒排索引和強大的分詞、相關性評分…

在Nginx部署Web應用,如何保障后端API的安全

1. 使用HTTPS和http2.0 參考&#xff1a;Nginx配置HTTP2.0_nginx 支持 2.0-CSDN博客 2. 設置嚴格的CORS策略 通過add_header指令設置CORS頭。 只允許來自https://frontend.yourdomain.com的請求訪問API location /api/ {if ($http_origin ~* (https://frontend\.yourdomai…

Nginx單向鏈表 ngx_list_t

目錄 基本概述 數據結構 接口描述 具體實現 ngx_list_create ngx_list_init ngx_list_push 使用案例 整理自 nginx 1.9.2 源碼 和 《深入理解 Nginx&#xff1a;模塊開發與架構解析》 基本概述 Nginx 中的 ngx_list_t 是一個單向鏈表容器&#xff0c;鏈表中的每一個節…

es快速掃描

介紹 Elasticsearch簡稱es&#xff0c;一款開源的分布式全文檢索引擎 可組建一套上百臺的服務器集群&#xff0c;處理PB級別數據 可滿足近實時的存儲和檢索 倒排索引 跟正排索引相對&#xff0c;正排索引是根據id進行索引&#xff0c;所以查詢效率非常高&#xff0c;但是模糊…

軟件需求建模方法

軟件需求建模是一個涉及多個學科的領域&#xff0c;其研究方向廣泛且多樣。以下是一些主要的研究方向&#xff1a; 1. 需求工程方法&#xff1a;研究如何更有效地收集、分析、規格化和驗證軟件需求。這包括新的需求工程方法論和工具的開發。 2. 需求管理&#xff1a;關注需求…

軟件項目需求分析的實踐探索(1)

一、項目啟動與規劃 組建團隊 包括項目經理、系統分析師、業務分析師以及可能涉及的最終用戶代表和領域專家等。例如&#xff0c;開發一個醫療管理軟件&#xff0c;就需要有醫療行業的專家參與&#xff0c;確保對醫療業務流程有深入理解。明確各成員的職責&#xff0c;如系統分…

wordpres當前分類調用父分類的名稱和鏈接

在WordPress中&#xff0c;如果你想在當前分類頁面調用并顯示父分類的名稱和鏈接&#xff0c;你可以使用以下代碼片段&#xff1a; <?php // 獲取當前分類的ID $cat_id get_queried_object_id();// 獲取當前分類的父分類ID $parent_id get_term($cat_id, category)->…

前端Python應用指南(三)Django vs Flask:哪種框架適合構建你的下一個Web應用?

《寫給前端的python應用指南》系列&#xff1a; &#xff08;一&#xff09;快速構建 Web 服務器 - Flask vs Node.js 對比&#xff08;二&#xff09;深入Flask&#xff1a;理解Flask的應用結構與模塊化設計 在上一篇博文中&#xff0c;我們深入探討了Flask框架&#xff0c;…

網絡管理-期末項目(附源碼)

環境&#xff1a;網絡管理 主機資源監控系統項目搭建 &#xff08;保姆級教程 建議點贊 收藏&#xff09;_搭建網絡版信息管理系統-CSDN博客 效果圖 下面3個文件的項目目錄(python3.8.8的虛擬環境) D:\py_siqintu\myproject5\Scripts\mytest.py D:\py_siqintu\myproject5\Sc…

MySQL 常用程序介紹

以下是一些常用的MySQL程序&#xff1a; 程序名作?mysqldMySQL的守護進程即 MySQL 服務器&#xff0c;要使?MySQL 服務器 mysqld必須正在運?狀態mysql MySQL客?端程序&#xff0c;?于交互式輸? SQL 語句或以批處理模式從?件執?SQL的命令??具 mysqlcheck?于檢查、修…

Redis篇--常見問題篇4--大Key(Big Key,什么是大Key,影響及使用建議)

1、概述 大Key&#xff1a;通常是指值&#xff08;Value&#xff09;的長度非常大&#xff0c;實際上鍵&#xff08;Key&#xff09;長度很大也算。通常來說&#xff0c;鍵本身不會很長&#xff0c;占用的內存較少&#xff0c;因此判斷一個鍵是否為bigKey主要看它對應的值的大…

云手機+YouTube:改變通信世界的劃時代技術

隨著科技的不斷進步&#xff0c;手機作為人們生活中不可或缺的工具&#xff0c;也在不斷地更新換代。近年來&#xff0c;一個名為“油管云手機”的全新產品正在引起廣泛的關注和討論。作為一個運用最新科技實現的新型手機&#xff0c;它在通信領域帶來了全新的體驗和革命性的變…

ModbusTCP從站轉Profinet主站案例

一. 案例背景 在復雜的工業自動化場景中&#xff0c;企業常常會采用不同品牌的設備來構建生產系統。西門子SINAMICS G120變頻器以其高性能、高精度的速度和轉矩控制功能&#xff0c;在電機驅動領域應用廣泛。施耐德M580可編程邏輯控制器則以強大的邏輯控制和數據處理能力著稱&…

JS 函數的定義與調用

文章目錄 1. 普通函數-無形參2. 普通函數-有形參3. 普通函數-參數默認值4. 普通函數-返回值5. 立即執行函數6. 匿名函數7. 箭頭函數8. 函數提升 1. 普通函數-無形參 函數定義時沒有指定形參, 調用時仍然可以向其傳遞參數, 通過默認參數 arguments 獲取, arguments 是一個偽數組…