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ù)不會報錯,下面已經(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ù)不會報錯,下面已經(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-03
Java獲取Process子進(jìn)程進(jìn)程ID方法詳解
這篇文章主要介紹了Java獲取Process子進(jìn)程進(jìn)程ID方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12
SpringCloud容器化服務(wù)發(fā)現(xiàn)及注冊實(shí)現(xiàn)方法解析
這篇文章主要介紹了SpringCloud容器化服務(wù)發(fā)現(xiàn)及注冊實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08
Java 關(guān)于eclipse導(dǎo)入項(xiàng)目發(fā)生的問題及解決方法(推薦)
下面小編就為大家分享一篇Java 關(guān)于eclipse導(dǎo)入項(xiàng)目發(fā)生的問題及解決方法(推薦),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12
Java判斷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-01
SpringBoot返回多種格式的數(shù)據(jù)的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot返回多種格式的數(shù)據(jù)的實(shí)現(xiàn)示例,主要包括了FastJson,xml,pdf,excel,資源流,具有一定的參考價值,感興趣的可以了解一下2021-10-10

