我有一个嵌套的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
对象中的嵌套Double
和Map
值?
答案 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)));