原型及输出效果
代码实现
@Data
public class ScreenGuidanceVO {
private String brandName;
private String modelName;
private String pictureUrl;
}
//返回格式
JSONArray js = new JSONArray();
//1. 查库-列表如原型图所示
List screenGuidanceList = service.getXXXList(screenGuidanceVO);
//分组保留原有顺序-(按BrandName分组,并保留其原有顺序)
Map> lists = screenGuidanceList.stream().collect(Collectors.groupingBy(ScreenGuidanceVO::getBrandName,LinkedHashMap::new,Collectors.toCollection(ArrayList::new)));
//遍历
for (Map.Entry> entry : lists.entrySet()) {
JSONObject brandObject = new JSONObject();
//获取list集合
List value = entry.getValue();
//获取key值
String keys = entry.getKey();
brandObject.put("brandName",keys);
JSONArray modelArray = new JSONArray();
//Map> modelList = value.stream().collect(Collectors.groupingBy(ScreenGuidanceVO::getModelName));--未保证其顺序
//保持原有顺序-(LinkedHashMap按插曲顺序排序)
Map> modelList = value.stream().collect(Collectors.groupingBy(ScreenGuidanceVO::getModelName,LinkedHashMap::new,Collectors.toCollection(ArrayList::new)));
for (Map.Entry> modelEntry : modelList.entrySet()) {
JSONObject modelObject = new JSONObject();
//获取list集合
List modelValue = modelEntry.getValue();
//获取key值
String modelKey = modelEntry.getKey();
modelObject.put("modelName",modelKey);
//获取中下游点字段的集合
List downNo = modelValue.stream().map(ScreenGuidanceVO::getPictureUrl).distinct().collect(Collectors.toList());
modelObject.put("pictureList",downNo);
modelArray.add(modelObject);
}
brandObject.put("modelList",modelArray);
js.add(brandObject);
}
写在最后
- 省市区父子三级树形结构,也可按照此逻辑实现,json拼接逻辑可按照各自需求自行拼接。
- 如有不足之处或更好解决方案,请大佬批评示下!