java - How can I convert Map to Map> using Java 8
问题描述
Here in my code I have Map<String , List >
now I want to convert that List
in Map
to Map<k , v>
. So that the results will be Map<String ,Map<K,V>>
.
解决方案
这是给您的代码示例。我为插图目的创建了一个 Person 类。无论你在 groupingby 中传递什么,最终都会成为一个键,这里我传递的是 Age(Integer)。在 toMap 中,我再次将 group(String) 作为 key,将 value 作为 Function.identity()。Function.identity() 获取当前对象,即 Person 对象并将其映射到值。
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
class Person {
String name;
String group;
Integer age;
public Person(String name, Integer age,String group) {
this.name = name;
this.age = age;
this.group = group;
}
//Getter setter
public String getGroup() {
return group;
}
public void setGroup(String group) {
this.group = group;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
public class ConvertListToMap {
public static void main(String...args) {
List<Person> persons = new ArrayList<>(10);
persons.add(new Person("Arun", 35,"A"));
persons.add(new Person("James", 39,"B"));
//Now want to make age as key and another map contains Person name as key and Person as Value.
Map<Integer, Map<String,Person>> mapFromList = persons.stream()
.collect(Collectors.groupingBy(Person::getAge,
Collectors.toMap(Person::getGroup, Function.identity())));
}
}