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));
}
代码如下所示:
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);
}
}
测试成果如下所示:
将一个对象作为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);
}
}
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!