首页 新闻 搜索 专区 学院

从一串格式相同的数据里面按照2个字段得到Map<String字段1, Map<String字段2, JSONObject>>

0
悬赏园豆:30 [已解决问题] 解决于 2020-12-25 22:40

假如有一个JSONArray(里面是JSONObject)数据,如图:

我想要分组得到数据
比如:得到一个Map<String, Map<String, JSONObject>>
分析:相同code下的以time为键,json为值的map
键是字符串格式的 code,
值是map<String, JSONObject>
这个map的键是time, 值是对应code和time的数据

请求大佬给思路,最后附带代码,谢谢!!!

问题补充:

最好能用stream流实现

lanto_liang的主页 lanto_liang | 初学一级 | 园豆:32
提问于:2020-12-23 19:32
< >
分享
最佳答案
0

先按照code分组,再把每个组转换成map。
代码的话,我不怎么会Java,大概就是这样

var map = jsonArray.stream()
    .collect(Collectors.groupingBy(
        o->o.getString("code"), 
        Collectors.toMap(o->o.getString("time"), o->o));
收获园豆:30
拓拓 | 小虾三级 |园豆:1038 | 2020-12-24 14:43

我开始也是想要stream流,但是发现抱错
/private int id;
private String name;
private int age;
/
List<Student> students = Arrays.asList(new Student(1, "12", 18),
new Student(1, "12", 18),
new Student(2, "12", 18),
new Student(1, "12", 17));
students.stream().collect(Collectors.groupingBy(s->s.getId(), Collections.toMap(s->s.getAge(), s->s)));

lanto_liang | 园豆:32 (初学一级) | 2020-12-24 20:24

lanto_liang | 园豆:32 (初学一级) | 2020-12-24 20:35

@lanto_liang: 你这个student的例子。。。Collections.toMap这里写错了好吧,Collectors.toMap才对

拓拓 | 园豆:1038 (小虾三级) | 2020-12-24 22:53

@拓拓:
运行报错了,亲!求解决 -

lanto_liang | 园豆:32 (初学一级) | 2020-12-24 23:02

@lanto_liang: 很明显啊,按照ID分组,ID为1的里面有两个年龄18的,创建set肯定冲突了

拓拓 | 园豆:1038 (小虾三级) | 2020-12-24 23:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册