这是拿到的数据:
[
{
"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流分组返回即可