sql查出来一对多的List<Map<String,Object>>数据,stream怎么grouingby合并啊{ "data": [ { "room_id": "1","name": "语文简体" }, { "room_id": "1", "name": "语文繁体"}]}转化{ "data": [ { "room_id": "1","names":[ "语文简体", "语文繁体"]]}
网上看的stream介绍入门都算不上,全是用类中怎么怎么样,
sql查出来一对多的List<Map<String,Object>>数据,stream怎么grouingby合并啊{ "data": [ { "room_id": "1","name": "语文简体" }, { "room_id": "1", "name": "语文繁体"}]}转化{ "data": [ { "room_id": "1","names":[ "语文简体", "语文繁体"]]}
网上看的stream介绍入门都算不上,全是用类中怎么怎么样,
这,不好,我想用留grouingby,这种不好,效率低
public static void main(String[] args) {
Map<String,Object> map1 = Maps.newHashMap();
map1.put("room_id", "1");
map1.put("name", "语文简体");
Map<String,Object> map2 = Maps.newHashMap();
map2.put("room_id", "1");
map2.put("name", "语文繁体");
List<Map<String,Object>> list = Lists.newArrayList(map1,map2);
Map<String,Object> map = Maps.newHashMap();
list.stream().collect(Collectors.groupingBy(m -> m.get("room_id"),Collectors.mapping(m -> m.get("name"),Collectors.toList()))).forEach((k,v) -> {
map.put("room_id", k);
map.put("names", v);
});
System.out.println(map);
}
引用来自“kse-music”的评论
public static void main(String[] args) {
Map<String,Object> map1 = Maps.newHashMap();
map1.put("room_id", "1");
map1.put("name", "语文简体");
Map<String,Object> map2 = Maps.newHashMap();
map2.put("room_id", "1");
map2.put("name", "语文繁体");
List<Map<String,Object>> list = Lists.newArrayList(map1,map2);
Map<String,Object> map = Maps.newHashMap();
list.stream().collect(Collectors.groupingBy(m -> m.get("room_id"),Collectors.mapping(m -> m.get("name"),Collectors.toList()))).forEach((k,v) -> {
map.put("room_id", k);
map.put("names", v);
});
System.out.println(map);
}
谢谢,用上并行是不是更快,我不需要顺序,,很好,,我在优化下,,,多谢
引用来自“kse-music”的评论
public static void main(String[] args) {
Map<String,Object> map1 = Maps.newHashMap();
map1.put("room_id", "1");
map1.put("name", "语文简体");
Map<String,Object> map2 = Maps.newHashMap();
map2.put("room_id", "1");
map2.put("name", "语文繁体");
List<Map<String,Object>> list = Lists.newArrayList(map1,map2);
Map<String,Object> map = Maps.newHashMap();
list.stream().collect(Collectors.groupingBy(m -> m.get("room_id"),Collectors.mapping(m -> m.get("name"),Collectors.toList()))).forEach((k,v) -> {
map.put("room_id", k);
map.put("names", v);
});
System.out.println(map);
}
如果多个group分组,怎么弄啊,网上的都不是很好,我如果想根据2个字段或多个字段grouingby下去,这个怎么办法。。。。。。请教下。。。。。刚学java
Map<String,Object> map = Maps.newHashMap();
list.stream().collect(Collectors.groupingBy(m -> m.get("room_id"),Collectors.groupingBy(m -> m.get("room_name")))).forEach((k,v) -> {
map.put("room_id", k);
v.forEach((k2,v2)->{
map.put("room_name", k2);
List<Map<String,Object>> rs = new ArrayList<>();
v2.forEach(mm -> {
Map<String,Object> m = new HashMap<>();
m.put("name", mm.get("name"));
m.put("time", mm.get("time"));
rs.add(m);
});
map.put("data", rs);
});
});
System.out.println(map);
引用来自“kse-music”的评论
Map<String,Object> map = Maps.newHashMap();
list.stream().collect(Collectors.groupingBy(m -> m.get("room_id"),Collectors.groupingBy(m -> m.get("room_name")))).forEach((k,v) -> {
map.put("room_id", k);
v.forEach((k2,v2)->{
map.put("room_name", k2);
List<Map<String,Object>> rs = new ArrayList<>();
v2.forEach(mm -> {
Map<String,Object> m = new HashMap<>();
m.put("name", mm.get("name"));
m.put("time", mm.get("time"));
rs.add(m);
});
map.put("data", rs);
});
});
System.out.println(map);
多谢
引用来自“kse-music”的评论
Map<String,Object> map = Maps.newHashMap();
list.stream().collect(Collectors.groupingBy(m -> m.get("room_id"),Collectors.groupingBy(m -> m.get("room_name")))).forEach((k,v) -> {
map.put("room_id", k);
v.forEach((k2,v2)->{
map.put("room_name", k2);
List<Map<String,Object>> rs = new ArrayList<>();
v2.forEach(mm -> {
Map<String,Object> m = new HashMap<>();
m.put("name", mm.get("name"));
m.put("time", mm.get("time"));
rs.add(m);
});
map.put("data", rs);
});
});
System.out.println(map);
引用来自“开养老院的银”的评论
多谢
大神问下有没有很好的方式,听说,reduce可以做这种吗,拜托。。。