List:数据转换,分组返回给前端

这是拿到的数据:

[
    {
        "grade":1,
        "taskName":"2021年年终考评"
    },
    {
        "grade":1,
        "taskName":"test"
    },
    {
        "grade":2,
        "taskName":"test"
    },
    {
        "grade":3,
        "taskName":"test"
    },
    {
        "grade":1,
        "taskName":"test"
    },
    {
        "grade":2,
        "taskName":"test"
    },
    {
        "grade":3,
        "taskName":"test"
    }
]

目标返回参考数据:

source: [
        ['taskName', '2021年年终考评', 'test'],
        ['A', 1, 2],
        ['B', 0, 2],
        ['B+', 0, 2],
        ['C', 0, 0]
      ]

1:A 2:B 3:B+ 4:C
每列的数字都是对应上面的名称的grade个数
有什么好的思路嘛!


 public static void main(String[] args) {
        String json = "[\n" +
                "    {\n" +
                "        \"grade\":1,\n" +
                "        \"taskName\":\"2021年年终考评\"\n" +
                "    },\n" +
                "    {\n" +
                "        \"grade\":1,\n" +
                "        \"taskName\":\"test\"\n" +
                "    },\n" +
                "    {\n" +
                "        \"grade\":2,\n" +
                "        \"taskName\":\"test\"\n" +
                "    },\n" +
                "    {\n" +
                "        \"grade\":3,\n" +
                "        \"taskName\":\"test\"\n" +
                "    },\n" +
                "    {\n" +
                "        \"grade\":1,\n" +
                "        \"taskName\":\"test\"\n" +
                "    },\n" +
                "    {\n" +
                "        \"grade\":2,\n" +
                "        \"taskName\":\"test\"\n" +
                "    },\n" +
                "    {\n" +
                "        \"grade\":3,\n" +
                "        \"taskName\":\"test\"\n" +
                "    }\n" +
                "]\n" +
                " ";


        List<JSONObject> jsonObjects = JSONObject.parseArray(json, JSONObject.class);
        HashMap<String, ArrayList<Integer>> temp = new HashMap<>();

        Set<String> firstLine = new LinkedHashSet<>();
        firstLine.add("TaskName");
        jsonObjects.stream().forEach(o -> {
            String taskName = o.getString("taskName");
            temp.put(taskName, temp.get(taskName));
            ArrayList<Integer> integers = temp.get(taskName);
            if(CollectionUtils.isEmpty(integers)){
                integers = Lists.newArrayList();
                integers.add(0);integers.add(0);integers.add(0);integers.add(0);
                temp.put(taskName,integers);
            }
            int grade = o.getIntValue("grade");
            integers.set(grade-1,integers.get(grade-1)+1);
        });
        ArrayList<ArrayList<String>> result = new ArrayList<>();
        ArrayList<String> firstColumn = new ArrayList<>();
        firstColumn.add("taskName");
        firstColumn.add("A");
        firstColumn.add("B");
        firstColumn.add("B+");
        firstColumn.add("C");
        Set<String> strings = temp.keySet();
        for (int i = 0; i < firstColumn.size(); i++) {
            ArrayList<String> temm = new ArrayList<>();
            String s = firstColumn.get(i);
            temm.add(s);
            if(s.equals("taskName")){
                temm.addAll(strings);
            }else {
                for (String s1 : strings) {
                    ArrayList<Integer> integers = temp.get(s1);
                    temm.add(String.valueOf(integers.get(i - 1)));
                }
            }
            result.add(temm);
        }

        System.out.println("result = " + result);
    }

我的思路,仅做参考

用stream流分组返回即可