to Map> using Java 8,java,dictionary"/>

首页 > 解决方案 > 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>>.

标签: javadictionary

解决方案


这是给您的代码示例。我为插图目的创建了一个 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())));
  }
}

推荐阅读