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 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!