很多情况下,从接口中查询出来的数据会比较的乱,比如一个年级有很多个班,每个班有很多学生,但是查询返回的是这年纪的所有学生,这种情况下,想要把数据分组(按班级显示:手风琴模式),处理方式有多种,比如说:
一、后台处理:(最近在用java8,所以会用到java8的一些特性)
@Override
public List<Map<String, Object>> getTwo(MateriaInventorySelectVO selectVO) {
List<Map<String, Object>> list = new ArrayList<>(); // 接收一级数据
selectVO.setTenantId(UserHelper.getTenantId());
List<ZMBomDetailVO> datas = materiaInventoryMapper.getStairHouseList(selectVO);
Map<String, List<ZMBomDetailVO>> list1 = datas.stream().collect(Collectors.groupingBy(item -> {
return item.getLevel2() + "@" + item.getLevel2Name();
}));
list1.forEach((key, slist) -> {
String[] keys = key.split("@");
Map data = new HashMap();
data.put("levelId", keys[0]);
data.put("levelName", keys[1]);
list.add(data);
});
return list;
}
二、前端处理(es6)
groupBy(array, fn) {
let groups = {}
array.forEach(o => {
let group = JSON.stringify(fn(o))
groups[group] = groups[group] || []
groups[group].push(o)
})
return Object.keys(groups).map(group => groups[group])
},
this.groupBy(res.data.rows, item => item.projectName)