Map仅在java中返回最后一个数据

时间:2017-09-28 06:31:05

标签: java spring spring-mvc spring-boot java-8

我对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>();放在父循环中时,它会在每次迭代中创建新对象。

我尽力使用电子书和参考资料。如果有人解决它,请觉得有用。提前谢谢。

2 个答案:

答案 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的新对象。所以最后它只有一个列表中的数据。

你只能获得最后的记录。