Java 将List转换为Map
List是Collection的一个子接口。它是一个对象的有序集合,其中可以存储重复的值。由于List保留了插入的顺序,它允许对元素进行位置访问和插入。List接口由ArrayList、LinkedList、Vector和Stack类实现。
java.util.Map接口表示一个键和一个值之间的映射。Map接口不是Collection接口的一个子类型。因此它的行为与其他的集合类型有些不同。
例子
输入: List : [1="1", 2="2", 3="3"]
输出: Map : {1=1, 2=2, 3=3}
输入: List : [1="Geeks", 2="for", 3="Geeks"]
输出: Map : {1=Geeks, 2=for, 3=Geeks}
下面是在Java中把List转换成Map的各种方法。为此,我们假设List的每个元素都有一个标识符,它将被用作生成的Map中的键。
- 按列表对象使用:
步骤:
- 获取要转换为地图的列表
- 创建一个空的地图
- 遍历列表中的项目,并将其逐一添加到地图中。
- 返回形成的地图
// Java program for list convert in map
// with the help of Object method
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
// create a list
class Student {
// id will act as Key
private Integer id;
// name will act as value
private String name;
// create curstuctor for reference
public Student(Integer id, String name)
{
// assign the value of id and name
this.id = id;
this.name = name;
}
// return private variable id
public Integer getId()
{
return id;
}
// return private variable name
public String getName()
{
return name;
}
}
// main class and method
public class GFG {
// main Driver
public static void main(String[] args)
{
// create a list
List<Student>
lt = new ArrayList<Student>();
// add the member of list
lt.add(new Student(1, "Geeks"));
lt.add(new Student(2, "For"));
lt.add(new Student(3, "Geeks"));
// create map with the help of
// Object (stu) method
// create object of Map class
Map<Integer, String> map = new HashMap<>();
// put every value list to Map
for (Student stu : lt) {
map.put(stu.getId(), stu.getName());
}
// print map
System.out.println("Map : " + map);
}
}
输出:
Map : {1=Geeks, 2=For, 3=Geeks}
- 使用Collectors.toMap()方法:该方法包括创建一个学生对象的列表,并使用Collectors.toMap()将其转换为一个Map。
步骤:
1. 获取要转换为地图的列表
2. 使用List.stream()方法将列表转换为流。
3. 在Collectors.toMap()方法的帮助下创建地图
4. 使用stream.collect()方法收集形成的地图。
5. 返回形成的地图
// Java program for list convert in map
// with the help of Collectors.toMap() method
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.stream.Collectors;
// create a list
class Student {
// id will act as Key
private Integer id;
// name will act as value
private String name;
// create curstuctor for reference
public Student(Integer id, String name)
{
// assign the value of id and name
this.id = id;
this.name = name;
}
// return private variable id
public Integer getId()
{
return id;
}
// return private variable name
public String getName()
{
return name;
}
}
// main class and method
public class GFG {
// main Driver
public static void main(String[] args)
{
// create a list
List<Student> lt = new ArrayList<>();
// add the member of list
lt.add(new Student(1, "Geeks"));
lt.add(new Student(2, "For"));
lt.add(new Student(3, "Geeks"));
// create map with the help of
// Collectors.toMap() method
LinkedHashMap<Integer, String>
map = lt.stream()
.collect(
Collectors
.toMap(
Student::getId,
Student::getName,
(x, y)
-> x + ", " + y,
LinkedHashMap::new));
// print map
map.forEach(
(x, y) -> System.out.println(x + "=" + y));
}
}
输出:
1=Geeks
2=For
3=Geeks
- 使用Collectors.groupingBy()创建MultiMap:
步骤:
- 获取要转换为地图的列表
- 使用List.stream()方法将列表转换为流。
- 在Collectors.groupingBy()方法的帮助下创建地图。
- 使用stream.collect()方法收集形成的地图。
- 返回形成的地图
// Java program for list convert in map
// with the help of Collectors.groupingBy() method
import java.util.*;
import java.util.stream.Collectors;
// create a list
class Student {
// id will act as Key
private Integer id;
// name will act as value
private String name;
// create curstuctor for reference
public Student(Integer id, String name)
{
// assign the value of id and name
this.id = id;
this.name = name;
}
// return private variable id
public Integer getId()
{
return id;
}
// return private variable name
public String getName()
{
return name;
}
}
// main class and method
public class GFG {
// main Driver
public static void main(String[] args)
{
// create a list
List<Student> lt = new ArrayList<Student>();
// add the member of list
lt.add(new Student(1, "Geeks"));
lt.add(new Student(1, "For"));
lt.add(new Student(2, "Geeks"));
lt.add(new Student(2, "GeeksForGeeks"));
// create map with the help of
// Object (stu) method
// create object of Multi Map class
// create multimap and store the value of list
Map<Integer, List<String> >
multimap = lt
.stream()
.collect(
Collectors
.groupingBy(
Student::getId,
Collectors
.mapping(
Student::getName,
Collectors
.toList())));
// print the multiMap
System.out.println("MultiMap = " + multimap);
}
}
输出:
MultiMap = {1=[Geeks, For], 2=[Geeks, GeeksForGeeks]}