Java8中List轉(zhuǎn)Map的多種方式代碼
首先創(chuàng)建兩個(gè)實(shí)體類(lèi)
@Data
public class Student {
//學(xué)號(hào)
private String no;
//姓名
private String name;
}
@Data
public class Teacher{
//教師號(hào)
private String no;
//姓名
private String name;
}一、List<Object> 轉(zhuǎn) Map<String, String>
//聲明一個(gè)List集合
List<Student> list = new ArrayList();
list.add(new Student("1001", "小A"));
list.add(new Student("1001", "小B"));//學(xué)號(hào)重復(fù)(下面特殊處理)
list.add(new Student("1002", "小C"));
list.add(new Student("1003", "小D"));
//將list轉(zhuǎn)map 【key為1個(gè)屬性,value為1個(gè)屬性】
Map<String, String> map =
list.stream().collect(Collectors.toMap(
Student::getNo,
Student::getName,
(key1 , key2) -> key1 //(map的鍵重復(fù)不會(huì)報(bào)錯(cuò),下面已經(jīng)處理)
));
//將list轉(zhuǎn)map 【key為多個(gè)屬性,value為1個(gè)屬性】
Map<String, String> map =
list.stream().collect(Collectors.toMap(
obj -> obj.getNo() + "_" + obj.getName(),
Student::getName,
(key1 , key2) -> key1 //(map的鍵重復(fù)不會(huì)報(bào)錯(cuò),下面已經(jīng)處理)
));二、List<Object> 轉(zhuǎn) Map<String, Object> (返回對(duì)象本身)
//聲明一個(gè)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個(gè)屬性,value為對(duì)象本身】 (map的鍵去重)
Map<String, Student> map =
list.stream().collect(Collectors.toMap(
Student::getNo,
obj -> obj,
(key1 , key2) -> key1
));
或者
//將list轉(zhuǎn)map 【key為1個(gè)屬性,value為對(duì)象本身】 (map的鍵去重)
Map<String, Student> map =
list.stream().collect(Collectors.toMap(
Student::getNo,
Function.identity(),
(key1 , key2) -> key1
));
或者
//將list轉(zhuǎn)map 【key為多個(gè)屬性,value為對(duì)象本身】 (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> (返回另一個(gè)對(duì)象)
//聲明一個(gè)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個(gè)屬性,value為另一個(gè)對(duì)象】 (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個(gè)字段分/以多個(gè)字段分】
//聲明一個(gè)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個(gè)屬性,value為相同key的集合】 (以某1個(gè)屬性來(lái)分組,將分組后相同的對(duì)象放在一起)
Map<String, List<Student>> map =
list.stream().collect( Collectors.groupingBy(Student::getNo) );
//將list轉(zhuǎn)map 【key為多個(gè)屬性,value為相同key的集合】 (以多個(gè)屬性來(lái)分組,將分組后相同的對(duì)象放在一起)
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Java設(shè)計(jì)一個(gè)高并發(fā)的秒殺系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何基于Java設(shè)計(jì)一個(gè)高并發(fā)的秒殺系統(tǒng),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下2023-10-10
java如何從地址串中解析提取省市區(qū)(完美匹配中國(guó)所有地址)
這篇文章主要給大家介紹了關(guān)于java如何從地址串中解析提取省市區(qū)的相關(guān)資料,通過(guò)這個(gè)方法可以完美匹配中國(guó)所有地址,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
Java實(shí)現(xiàn)飛機(jī)航班管理系統(tǒng)的思路詳解
這篇文章主要介紹了Java實(shí)現(xiàn)飛機(jī)航班管理系統(tǒng)的思路詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Java POI讀取excel中數(shù)值精度損失問(wèn)題解決
這篇文章主要介紹了Java POI讀取excel中數(shù)值精度損失問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Java反射之Call stack introspection詳解
這篇文章主要介紹了Java反射之Call stack introspection詳解,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
SpringBoot集成P6Spy實(shí)現(xiàn)SQL日志的記錄詳解
P6Spy是一個(gè)框架,它可以無(wú)縫地?cái)r截和記錄數(shù)據(jù)庫(kù)活動(dòng),而無(wú)需更改現(xiàn)有應(yīng)用程序的代碼。一般我們使用的比較多的是使用p6spy打印我們最后執(zhí)行的sql語(yǔ)句2022-11-11
java遍歷http請(qǐng)求request的所有參數(shù)實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇java遍歷http請(qǐng)求request的所有參數(shù)實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
Spring高級(jí)注解@PropertySource詳細(xì)解讀
這篇文章主要介紹了Spring高級(jí)注解@PropertySource詳細(xì)解讀,@PropertySource注解用于指定資源文件讀取的位置,它不僅能讀取properties文件,也能讀取xml文件,并且通過(guò)YAML解析器,配合自定義PropertySourceFactory實(shí)現(xiàn)解析yaml文件,需要的朋友可以參考下2023-11-11

