Java8中List轉(zhuǎn)Map的多種方式代碼
首先創(chuàng)建兩個實(shí)體類
@Data public class Student { //學(xué)號 private String no; //姓名 private String name; } @Data public class Teacher{ //教師號 private String no; //姓名 private String name; }
一、List<Object> 轉(zhuǎn) Map<String, String>
//聲明一個List集合 List<Student> list = new ArrayList(); list.add(new Student("1001", "小A")); list.add(new Student("1001", "小B"));//學(xué)號重復(fù)(下面特殊處理) list.add(new Student("1002", "小C")); list.add(new Student("1003", "小D")); //將list轉(zhuǎn)map 【key為1個屬性,value為1個屬性】 Map<String, String> map = list.stream().collect(Collectors.toMap( Student::getNo, Student::getName, (key1 , key2) -> key1 //(map的鍵重復(fù)不會報(bào)錯,下面已經(jīng)處理) )); //將list轉(zhuǎn)map 【key為多個屬性,value為1個屬性】 Map<String, String> map = list.stream().collect(Collectors.toMap( obj -> obj.getNo() + "_" + obj.getName(), Student::getName, (key1 , key2) -> key1 //(map的鍵重復(fù)不會報(bào)錯,下面已經(jīng)處理) ));
二、List<Object> 轉(zhuǎn) Map<String, Object> (返回對象本身)
//聲明一個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轉(zhuǎn)map 【key為1個屬性,value為對象本身】 (map的鍵去重) Map<String, Student> map = list.stream().collect(Collectors.toMap( Student::getNo, obj -> obj, (key1 , key2) -> key1 )); 或者 //將list轉(zhuǎn)map 【key為1個屬性,value為對象本身】 (map的鍵去重) Map<String, Student> map = list.stream().collect(Collectors.toMap( Student::getNo, Function.identity(), (key1 , key2) -> key1 )); 或者 //將list轉(zhuǎn)map 【key為多個屬性,value為對象本身】 (map的鍵去重) Map<String, Student> map = list.stream().collect(Collectors.toMap( obj -> obj.getNo() + "_" + obj.getName(), obj -> obj, (key1 , key2) -> key1 ));
三、List<Object1> 轉(zhuǎn) Map<String, Object2> (返回另一個對象)
//聲明一個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轉(zhuǎn)map 【key為1個屬性,value為另一個對象】 (map的鍵去重) Map<String, Teacher> map = list.stream().collect(Collectors.toMap( Student::getNo, stu -> { Teacher teacher = new Teacher(); teacher.setNo(stu.getNo()); teacher.setName(stu.getName()); return teacher; }, (key1 , key2) -> key1 ));
四、List<Object> 轉(zhuǎn) Map<String, List<Object>> (分組)【以1個字段分/以多個字段分】
//聲明一個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轉(zhuǎn)map 【key為1個屬性,value為相同key的集合】 (以某1個屬性來分組,將分組后相同的對象放在一起) Map<String, List<Student>> map = list.stream().collect( Collectors.groupingBy(Student::getNo) ); //將list轉(zhuǎn)map 【key為多個屬性,value為相同key的集合】 (以多個屬性來分組,將分組后相同的對象放在一起) Map<String, List<Student>> map = list.stream().collect( Collectors.groupingBy(obj -> obj.getNo + "_" + obj.getName) );
總結(jié)
到此這篇關(guān)于Java8中List轉(zhuǎn)Map的多種方式的文章就介紹到這了,更多相關(guān)Java8 List轉(zhuǎn)Map內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot整合數(shù)據(jù)庫訪問層的實(shí)戰(zhàn)
本文主要介紹了SpringBoot整合數(shù)據(jù)庫訪問層的實(shí)戰(zhàn),主要包含JdbcTemplate和mybatis框架的整合應(yīng)用,具有一定的參考價值,感興趣的可以了解一下2022-03-03Java獲取Process子進(jìn)程進(jìn)程ID方法詳解
這篇文章主要介紹了Java獲取Process子進(jìn)程進(jìn)程ID方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12SpringCloud容器化服務(wù)發(fā)現(xiàn)及注冊實(shí)現(xiàn)方法解析
這篇文章主要介紹了SpringCloud容器化服務(wù)發(fā)現(xiàn)及注冊實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08Java 關(guān)于eclipse導(dǎo)入項(xiàng)目發(fā)生的問題及解決方法(推薦)
下面小編就為大家分享一篇Java 關(guān)于eclipse導(dǎo)入項(xiàng)目發(fā)生的問題及解決方法(推薦),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12Java判斷IP地址為內(nèi)網(wǎng)IP還是公網(wǎng)IP的方法
這篇文章主要介紹了Java判斷IP地址為內(nèi)網(wǎng)IP還是公網(wǎng)IP的方法,針對tcp/ip協(xié)議中保留的三個私有地址進(jìn)行判斷分析,是比較實(shí)用的技巧,需要的朋友可以參考下2015-01-01SpringBoot返回多種格式的數(shù)據(jù)的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot返回多種格式的數(shù)據(jù)的實(shí)現(xiàn)示例,主要包括了FastJson,xml,pdf,excel,資源流,具有一定的參考價值,感興趣的可以了解一下2021-10-10