我们开发中经常要用到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); ListstrList = new ArrayList<>(); Collections.addAll(strList, stu1, stu2, stu3, stu4,stu5); // 1.根据age作为key,name作为value转map(age相同时前面覆盖后面的数据) Map collect = strList.stream().collect(Collectors.toMap(Student::getAge, Student::getName, (key1,key2) -> key1 )); for (Map.Entry integerStudentEntry : collect.entrySet()) { System.out.println(integerStudentEntry.getKey() + ":" + String.valueOf(integerStudentEntry.getValue())); } // 2.根据age作为key,student对象作为value转map(age相同时前面覆盖后面的数据) Map collectStu = strList.stream().collect(Collectors.toMap(Student::getAge, Function.identity(), (key1, key2) -> key2)); for (Map.Entry integerStudentEntry : collectStu.entrySet()) { System.out.println(integerStudentEntry.getKey() + "::" + String.valueOf(integerStudentEntry.getValue())); } // 3.根据age作为key,student对象作为value分组转map(age相同时前面覆盖后面的数据) Map > listMap = strList.stream().collect(Collectors.groupingBy(Student::getAge)); for (Map.Entry > integerStudentEntry : listMap.entrySet()) { System.out.println(integerStudentEntry.getKey() + "::" + String.valueOf(integerStudentEntry.getValue())); } }
总结:平时需要用到的list转map的简单方法基本都列举出来了。