一、分析
实际应用场景,list中的元素的某个属性是重复的,因此可以按照此元素对list进行分组,最终放到Map集合,此元素为key值,分组后的list为value值
二、实现代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public static Map<String,List<User>> splitGroup(List<User> list){ Map<String,List<User>> map = new HashMap<>(); for(User user : list){ String key = user.getId(); if(map.containsKey(key)){ map.get(key).add(user); }else{ List<User> userList = new ArrayList<>(); userList.add(user); map.put(key,userList); } } return map;
|
三、测试代码及测试结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public static void main(String[] args) { List<User> list = new ArrayList<>(); list.add(new User("1", "1")); list.add(new User("1", "2")); list.add(new User("2", "2")); list.add(new User("2", "3")); list.add(new User("2", "4")); list.add(new User("3", "3")); Map<String,List<User>> stringListMap = list.stream().collect(Collectors.groupingBy(User::getId));
Set<Map.Entry<String, List<User>>> entries = stringListMap.entrySet(); for(Map.Entry m : entries){ System.out.println(m); } }
|
测试的结果如下

四、实战
原数据结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| public class ThresholdVo {
@ApiModelProperty(value = "站点ID") private Integer siteId;
@ApiModelProperty(value = "站点名称") private String siteName;
@ApiModelProperty(value = "站点状态") private Integer state;
@ApiModelProperty(value = "所属项目ID") private Integer projId;
@ApiModelProperty(value = "所属项目名称") private String projName;
@ApiModelProperty(value = "设备ID") private String deviceId;
@ApiModelProperty(value = "设备名称") private String deviceName;
@ApiModelProperty(value = "设备编号") private String dNo;
@ApiModelProperty(value = "检测能力code") private String mCode;
@ApiModelProperty(value = "低阈值") private BigDecimal lowThreshold;
@ApiModelProperty(value = "实际值") private Float av;
@ApiModelProperty(value = "高阈值") private BigDecimal highThreshold;
@ApiModelProperty(value = "基础高层") private BigDecimal basicHigh;
@ApiModelProperty(value = "时间") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime;
@ApiModelProperty(value = "是否异常") private Integer isError; }
|
目标数据结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| public class RealTimeDataVo {
@ApiModelProperty(value = "站点ID") private Integer siteId;
@ApiModelProperty(value = "站点名称") private String siteName;
@ApiModelProperty(value = "站点状态") private Integer state;
@ApiModelProperty(value = "所属项目ID") private Integer projId;
@ApiModelProperty(value = "所属项目名称") private String projName;
@ApiModelProperty(value = "设备ID") private String deviceId;
@ApiModelProperty(value = "设备名称") private String deviceName;
@ApiModelProperty(value = "设备编号DeviceNo") private String waterId;
@ApiModelProperty(value = "时间") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") private Date date;
@ApiModelProperty(value = "监测能力") private List<MoniVo> moniVoList; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class MoniVo {
@ApiModelProperty(value = "检测能力code") private String moniCode;
@ApiModelProperty(value = "实际值") private Float av;
@ApiModelProperty(value = "低阈值") private BigDecimal lowThreshold;
@ApiModelProperty(value = "高阈值") private BigDecimal highThreshold;
@ApiModelProperty(value = "基础高层") private BigDecimal basicHigh;
@ApiModelProperty(value = "是否异常") private Integer isError; }
|
结构变化

代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| List<RealTimeDataVo> realTimeDataVoList = new ArrayList<>();
HashMap<RealTimeDataVo, List<MoniVo>> map = new HashMap<>(); for (ThresholdVo thresholdVo : thresholdVos){ RealTimeDataVo realTimeDataVo = new RealTimeDataVo(thresholdVo); MoniVo moniVo = new MoniVo(thresholdVo); if(map.containsKey(realTimeDataVo)){ map.get(realTimeDataVo).add(moniVo); }else{ List<MoniVo> moniVoList = new ArrayList<>(); moniVoList.add(moniVo); map.put(realTimeDataVo,moniVoList); } } for (RealTimeDataVo realTimeDataVo : map.keySet()) { realTimeDataVo.setMoniVoList(map.get(realTimeDataVo)); realTimeDataVoList.add(realTimeDataVo); }
|
参考博客
https://blog.csdn.net/shang_0122/article/details/108753580