Java Map到列表的转换
Map是一个将键映射为值的对象,或者是一个属性-值对的集合。List是一个对象的有序集合,List可以包含重复的值。Map有两个值(一个键和值),而List只有一个值(一个元素)。因此,我们可以生成两个列表,如表所示。
- 值的列表和
- 从Map生成的键列表。
让我们假设 “map “是Map的实例,从现在开始,我们都知道它包含set和value对。
- map.values() 将返回map的值的集合。
- map.keySet() 将返回一个地图的键集。
方法
- 在ArrayList构造函数参数中传递键集
- 将由map.values()方法生成的地图值集合传递给ArrayList构造函数参数
- 使用Streams API(仅适用于JDK 8及以后的版本)
让我们来讨论一下每一种方法
方法1: 在ArrayList构造函数参数中传递键的集合
代码: 我们可以绕过map.keySet()方法生成的map键集,将Map键转换为List of Keys,并传递给ArrayList构造函数参数,如下所示
map.values(); // Now here e will pass sets of keys of our map, so it becomes
map.values(map.keySet()); // Now we just need to store it into List, so creating object
List ListofKeys = new ArrayList(map.keySet()); // Now we are done with conversion.
语法: 因此,它如下。
List ListofKeys = new ArrayList(map.keySet());
方法2: List ListofKeys = new ArrayList(map.keySet())。
我们可以通过将map.values()方法生成的map值集合传递给ArrayList构造函数参数,将Map keys转换为List of Values。
语法: 此后,它如下所示。
List Listofvalues = new ArrayList(map.values());
例子
// Java Program to Convert Map to List
// Importing required classes
import java.util.*;
class GFG {
// Method 1
public static void main(String[] args)
{
// Creating HashMap
HashMap<String, Integer> hs = new HashMap<>();
// Adding elements to hashMap
hs.put("Geeks", 1);
hs.put("for", 2);
hs.put("Geeks", 3);
hs.put("Computer", 4);
hs.put("Science", 5);
hs.put("Portal", 6);
// Calling method
MapValuesToList obj = new MapValuesToList(hs);
// Storing into List
List<Integer> mapvaltolist = obj.mapvaltolist(hs);
// Printing via for loops
for (Integer integerList : mapvaltolist) {
// Printing our ArrayList
System.out.println(integerList);
}
}
// Method 2
// To convert Map to List
public List<String>
mapvaltolist(Map<String, Integer> map)
{
// Using Collection
Collection<Integer> val = map.values();
// Creating an ArrayList
ArrayList<Integer> al = new ArrayList<>(values);
return al;
}
}
输出
1
2
3
4
5
6
方法3: 使用流API
stream()方法从Map.keySet()返回的地图键的Set中返回一个键流。Stream类的collect()方法在一个List中收集键流。Collectors.toCollection(ArrayList::new)传递给collect()方法,以收集为新的ArrayList。人们也可以使用Stream API将地图的键和值转换为各自的列表,其语法如下。
List ListofKeys = **map.keyset()**.stream().collect(Collectors.toCollection(ArrayList::new));
List Listofvalues= **map.values()**.stream().collect(Collectors.toCollection(ArrayList::new));
注意: 你可以在ArrayList、LinkedList或任何其他List实现中收集Stream的元素。
实现
给出N个学生的RollNo和学生姓名作为输入。首先,我们创建一个地图,其中Rollno是键,因为Rollno是唯一的,Name是地图的值,然后将这个地图分别转换成值和键的列表。生成的键列表包含学生的RollNo,值列表包含学生的姓名。
例子
// Java program to Convert Map to List
// Importing required classes
import java.util.*;
// Importing stream sub-package
import java.util.stream.*;
// Main class
// MapToList
class GFG {
// Main driver method
public static void main(String[] args)
{
// Scanner class to take input of key-value pairs
Scanner sc = new Scanner(System.in);
// Creating a Hashmap which maps rollno with student
// name
Map<String, String> map
= new HashMap<String, String>();
// Command for better usability
System.out.println("Enter No of Students");
// Taking input to Hashmap
// via iterating using for loop
int noOfStudents = Integer.parseInt(sc.nextLine());
for (int i = 0; i < noOfStudents; i++) {
String input = sc.nextLine();
String[] studentdata = input.split(" ");
String rollno = studentdata[0];
String name = studentdata[1];
// Simply inserting received pairs to Map
map.put(rollno, name);
}
// Now first create list of keys and values
List<String> ListofKeys = null;
List<String> ListofValues = null;
// Now converting hashMap to List of keys and values
ListofKeys = map.keySet().stream().collect(
Collectors.toCollection(ArrayList::new));
ListofValues = map.values().stream().collect(
Collectors.toCollection(ArrayList::new));
// lastly printing List of rollno and name of
// students
System.out.println("List of RollNo of Students");
System.out.println(ListofKeys.toString());
System.out.println("List of Name of Students");
System.out.println(ListofValues.toString());
}
}
输出