list转map的三种方法
- 原创
- |
- 浏览:33919
- |
- 更新:
- |
- 标签:JAVA
List代表有序集合,有序可重复;
Map集合存储键值对;
第一种:使用for循环将list集合转map
将一个实体类的list集合转为map
学生实体类:
package test;
public class Student {
private Long id;
private String age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", age='" + age + '\'' +
'}';
}
}
转换类编写。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ListToMap {
public static void main(String[] args) {
List<Student> StudentList = new ArrayList<Student>();
Student Student1 = new Student();
Student1.setId(1L);
Student1.setAge("12");
Student Student2 = new Student();
Student2.setId(2L);
Student2.setAge("13");
StudentList.add(Student1);
StudentList.add(Student2);
Map<Long, Student> maps = new HashMap<Long, Student>();
for (Student Student : StudentList) {
//将属性中的唯一标识作为key
maps.put(Student.getId(), Student);
}
System.out.println(maps);
}
}
- 相关内容未经授权抓取自百度经验
如果实体类中没有唯一的标识,可以使用数组下标来作为key
for (int i = 0; i < StudentList.size(); i++) {
map.put("s"+i, StudentList.get(i));
}
END
第二种:使用guava将list集合转map
第一步:首先学习一下jdk1.8的新特性
1.1、java jdk1.8新特性Lambda表达式
1.2、java jdk1.8新特性Stream API
第二步:练习代码如下所示:
import com.google.common.base.Function;
import com.google.common.collect.Maps;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class ListToMap {
public static void main(String[] args) {
List<Student> StudentList = new ArrayList<Student>();
Student Student1 = new Student();
Student1.setId(1L);
Student1.setAge("12");
Student Student2 = new Student();
Student2.setId(2L);
Student2.setAge("13");
StudentList.add(Student1);
StudentList.add(Student2);
Map<Long, Student> maps = Maps.uniqueIndex(StudentList,
new Function<Student, Long>() {
@Override
public Long apply(Student student) {
return student.getId();
}
});
System.out.println(maps);
}
}
测试结果如下所示:
END
第三种:使用JDK1.8 将list集合转map
将一个对象作为value放入map中
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class ListToMap {
public static void main(String[] args) {
List<Student> StudentList = new ArrayList<Student>();
Student Student1 = new Student();
Student1.setId(1L);
Student1.setAge("12");
Student Student2 = new Student();
Student2.setId(2L);
Student2.setAge("13");
Student Student3 = new Student();
Student3.setId(2L);
Student3.setAge("14");
StudentList.add(Student1);
StudentList.add(Student2);
StudentList.add(Student3);
/**
* List -> Map
* 需要注意的是:
* toMap 如果集合对象有重复的key,会报错Duplicate key ....
* apple1,apple12的id都为1。
* 可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
* 或者可以用 (k1,k2)->k2 来设置,如果有重复的key,则保留key2,舍弃key1
*/
Map<Long, Student> maps = StudentList.stream().collect(Collectors.toMap(Student::getId,Function.identity(), (v1,v2)->v1));
System.out.println(maps);
}
}
将一个对象的属性作为value
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class ListToMap {
public static void main(String[] args) {
List<Student> StudentList = new ArrayList<Student>();
Student Student1 = new Student();
Student1.setId(1L);
Student1.setAge("12");
Student Student2 = new Student();
Student2.setId(2L);
Student2.setAge("13");
Student Student3 = new Student();
Student3.setId(2L);
Student3.setAge("14");
StudentList.add(Student1);
StudentList.add(Student2);
StudentList.add(Student3);
/**
* List -> Map
* 需要注意的是:
* toMap 如果集合对象有重复的key,会报错Duplicate key ....
* apple1,apple12的id都为1。
* 可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2 或者可以用 (k1,k2)->k2 来设置,如果有重复的key,则保留key2,舍弃key1
*/
Map<Long, String> maps = StudentList.stream().collect(Collectors.toMap(Student::getId,Student::getAge, (v1,v2)->v1));
System.out.println(maps);
}
}
END