如何访问流中的嵌套Map条目?

时间:2018-11-15 18:00:31

标签: java collections

我有一个嵌套的Map对象,如下所示:

Map<String,Map<Integer,Double>> items = getMap();

我有一个名为MyClass的类,它的构造函数是这样的:

public MyClass(String city, int month, double average){}

现在我想将items转换为MyClass列表,如下所示:

List<MyClass> myList = items.entrySet().stream()
                                       .map(i-> new MyClass(i.getKey(), ?, ?))
                                       .collect(Collectors.toList()); 

但是我不知道应该使用什么代替?来访问Integer对象中的嵌套DoubleMap值?

2 个答案:

答案 0 :(得分:7)

由于您具有嵌套地图,因此您也必须处理内部地图条目。 (这是假设一个城市有许多月平均对)

List<MyClass> myList = items.entrySet()
    .stream()
    .flatMap(entry -> entry.getValue().entrySet()
        .stream()
        .map(innerEntry -> new MyClass(entry.getKey(), innerEntry.getKey(), innerEntry.getValue()))
    )
    .collect(Collectors.toList());

答案 1 :(得分:3)

这是一种非常紧凑的方法,不使用流,但使用Java 8功能:

List<MyClass> myList = new ArrayList<>();
items.forEach((city, innerMap) -> innerMap.forEach(month, average) -> 
                                  myList.add(new MyClass(city, month, average)));