我们开发中经常要用到list转map,下面我整理了几种方法供参考:
先创建对象:
package com.yabao.testvo;
public class Student extends Man {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
1.传统的方法经过遍历list然后put进map中。这个方法就不演示了。
下面三种就直接在代码里面展示了。
@Test
public void test4() {
Student stu1 = new Student("张三", 23);
Student stu2 = new Student("李四", 24);
Student stu3 = new Student("王五", 25);
Student stu4 = new Student("赵六", 23);
Student stu5 = new Student("前七", 25);
List<Student> strList = new ArrayList<>();
Collections.addAll(strList, stu1, stu2, stu3, stu4,stu5);
// 1.根据age作为key,name作为value转map(age相同时前面覆盖后面的数据)
Map<Integer, String> collect = strList.stream().collect(Collectors.toMap(Student::getAge, Student::getName, (key1,key2) -> key1 ));
for (Map.Entry<Integer, String> integerStudentEntry : collect.entrySet()) {
System.out.println(integerStudentEntry.getKey() + ":" + String.valueOf(integerStudentEntry.getValue()));
}
// 2.根据age作为key,student对象作为value转map(age相同时前面覆盖后面的数据)
Map<Integer, Student> collectStu = strList.stream().collect(Collectors.toMap(Student::getAge, Function.identity(), (key1, key2) -> key2));
for (Map.Entry<Integer, Student> integerStudentEntry : collectStu.entrySet()) {
System.out.println(integerStudentEntry.getKey() + "::" + String.valueOf(integerStudentEntry.getValue()));
}
// 3.根据age作为key,student对象作为value分组转map(age相同时前面覆盖后面的数据)
Map<Integer, List<Student>> listMap = strList.stream().collect(Collectors.groupingBy(Student::getAge));
for (Map.Entry<Integer, List<Student>> integerStudentEntry : listMap.entrySet()) {
System.out.println(integerStudentEntry.getKey() + "::" + String.valueOf(integerStudentEntry.getValue()));
}
}
总结:平时需要用到的list转map的简单方法基本都列举出来了。
版权声明:本文为m0_57640408原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。