我对spring和java 8更新鲜。我使用lambda表达式对列表进行了分组并得到了这种格式。
{
"2016": [
{"title":"Management","avg":0},
{"title":"Satisfaction","avg":0}
],
"2017": [
{"title":"aaa","avg":19},
{"title":"Energy","avg":6},
{"title":"energy","avg":17}
],
"2019": [
{"title":"Satisfaction","avg":0}
]
}
我需要获取此格式的所有数据
{"year":2016,"Management":0,"Satisfaction":0},
{"year":2017,"Stress":19,"Energy":6,"Workload":17},
{"year":2019,"Satisfaction":0}
所以我写了一段java代码,
Map<String, Integer> mapNew = null;
for (Map.Entry<Integer, List<Tyma>> ee : mapList.entrySet()) { //looping the output of lambda expression
mapNew = new HashMap<String, Integer>();
mapNew.put("year",ee.getKey());
List<Tyma> li = ee.getValue();
for (Tyma dept : li) {
mapNew.put(dept.getTitle(), dept.getAvg()); //getters of Tyma class
}
}
当我在循环之外返回mapNew
时,它仅返回最后一个数据({"year":2019,"Satisfaction":0}
)。但我需要获取所有数据。
我想,当我们将mapNew = new HashMap<String, Integer>();
放在父循环中时,它会在每次迭代中创建新对象。
我尽力使用电子书和参考资料。如果有人解决它,请觉得有用。提前谢谢。
答案 0 :(得分:6)
看起来你正在创建多个Map
并尝试将它们存储在同一个变量中,所以当然只有最后一个Map
将被变量引用。
您应该将它们存储在某些Collection
。
例如,您可以将它们存储在List
:
List<Map<String, Integer>> maps = new ArrayList<>();
for (Map.Entry<Integer, List<Tyma>> ee : mapList.entrySet()) { //looping the output of lambda expression
Map<String, Integer> mapNew = new HashMap<String, Integer>();
maps.add(mapNew);
mapNew.put("year",ee.getKey());
List<Tyma> li = ee.getValue();
for (Tyma dept : li) {
mapNew.put(dept.getTitle(), dept.getAvg()); //getters of Tyma class
}
}
答案 1 :(得分:1)
当您在for中写入此行时,
mapNew = new HashMap();
每次循环运行时都会创建哈希map的新对象。所以最后它只有一个列表中的数据。
你只能获得最后的记录。