要求将B实体集合list循环最少次数转存成A集合实体list
A集合实体类 , 其中数据更新时间和站点code为主键
@Data
@TableName("moni_local_site_hour")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="moni_local_site_hour对象", description="本地站点小时数据")
public class MoniLocalSiteHour implements Serializable {
private static final long serialVersionUID = 1L;
/**数据更新时间*/
@Excel(name = "数据更新时间", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "数据更新时间")
private Date datatime;
/**站点Code*/
@Excel(name = "站点Code", width = 15)
@ApiModelProperty(value = "站点Code")
private String stationcode;
/**站点名称*/
@Excel(name = "站点名称", width = 15)
@ApiModelProperty(value = "站点名称")
private String stationname;
/**二氧化硫浓度值*/
@Excel(name = "二氧化硫浓度值", width = 15)
@ApiModelProperty(value = "二氧化硫浓度值")
private Integer so2;
/**二氧化氮浓度值*/
@Excel(name = "二氧化氮浓度值", width = 15)
@ApiModelProperty(value = "二氧化氮浓度值")
private Integer no2;
/**细颗粒物浓度值*/
@Excel(name = "细颗粒物浓度值", width = 15)
@ApiModelProperty(value = "细颗粒物浓度值")
private Integer pm25;
/**可吸入颗粒物浓度值*/
@Excel(name = "可吸入颗粒物浓度值", width = 15)
@ApiModelProperty(value = "可吸入颗粒物浓度值")
private Integer pm10;
/**一氧化碳浓度值*/
@Excel(name = "一氧化碳浓度值", width = 15)
@ApiModelProperty(value = "一氧化碳浓度值")
private BigDecimal co;
/**臭氧浓度值*/
@Excel(name = "臭氧浓度值", width = 15)
@ApiModelProperty(value = "臭氧浓度值")
private Integer o3;
/**PM2.5分指数*/
@Excel(name = "PM2.5分指数", width = 15)
@ApiModelProperty(value = "PM2.5分指数")
private Integer pm25iaqi;
/**二氧化硫分指数*/
@Excel(name = "二氧化硫分指数", width = 15)
@ApiModelProperty(value = "二氧化硫分指数")
private Integer so2iaqi;
/**二氧化氮分指数*/
@Excel(name = "二氧化氮分指数", width = 15)
@ApiModelProperty(value = "二氧化氮分指数")
private Integer no2iaqi;
/**PM10分指数*/
@Excel(name = "PM10分指数", width = 15)
@ApiModelProperty(value = "PM10分指数")
private Integer pm10iaqi;
/**一氧化碳分指数*/
@Excel(name = "一氧化碳分指数", width = 15)
@ApiModelProperty(value = "一氧化碳分指数")
private Integer coiaqi;
/**臭氧分指数*/
@Excel(name = "臭氧分指数", width = 15)
@ApiModelProperty(value = "臭氧分指数")
private Integer o3iaqi;
/**空气质量指数*/
@Excel(name = "空气质量指数", width = 15)
@ApiModelProperty(value = "空气质量指数")
private Integer aqi;
/**首要污染物*/
@Excel(name = "首要污染物", width = 15)
@ApiModelProperty(value = "首要污染物")
private String primarypol;
/**AQI等级*/
@Excel(name = "AQI等级", width = 15)
@ApiModelProperty(value = "AQI等级")
private String aqilevel;
/**臭氧8小时浓度值*/
@Excel(name = "臭氧8小时浓度值", width = 15)
@ApiModelProperty(value = "臭氧8小时浓度值")
@TableField("o3_8h")
private Integer o38h;
/**臭氧8小时分指数*/
@Excel(name = "臭氧8小时分指数", width = 15)
@ApiModelProperty(value = "臭氧8小时分指数")
@TableField("o3_8hiaqi")
private Integer o38hiaqi;
/**综合指数*/
@Excel(name = "综合指数", width = 15)
@ApiModelProperty(value = "综合指数")
private BigDecimal countindex;
/**flag*/
@Excel(name = "flag", width = 15)
@ApiModelProperty(value = "flag")
private Integer flag;
/**
* 数据类型0:原始实况,1:审核实况,2:原始标况,3:审核标况
*/
private Integer dataType;
/**创建时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**修改时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "修改时间")
private Date updateTime;
/**温度*/
@Excel(name = "温度", width = 15)
@ApiModelProperty(value = "温度")
private BigDecimal temp;
/**相对湿度*/
@Excel(name = "相对湿度", width = 15)
@ApiModelProperty(value = "相对湿度")
private BigDecimal rh;
/**气压*/
@Excel(name = "气压", width = 15)
@ApiModelProperty(value = "气压")
private BigDecimal pres;
/**风速*/
@Excel(name = "风速", width = 15)
@ApiModelProperty(value = "风速")
private BigDecimal speed;
/**风向*/
@Excel(name = "风向", width = 15)
@ApiModelProperty(value = "风向")
private BigDecimal wind;
}
B集合实体
```java
@Data
public class StationHourOrDayData {
/**
* 时间
*/
@Excel(name = "时间", width = 15, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "时间")
private Date collectDatetime;
/**
* 是否异常(0:异常 1:正常)
*/
private Integer isNormal;
/**
* 污染等级
*/
private String level;
/**
* 污染物浓度值
*/
private Integer pollutantValue;
/**
* 污染物ID
*/
@TableField(exist = false)
private String pollutantId;
/**
* 站点code
*/
@TableField(exist = false)
private String stationId;
/**
* 站点名称
*/
@TableField(exist = false)
private String address;
/**
* 具体污染物(so2 / no2 / pm25 / pm10 / co / o3 / aqi )
*/
@TableField(exist = false)
private String pollutantType;
}
```
基于Monster 组和GPT的调写:大概思路:通过Map将B集合按照主键(datatime + stationcode)分组,然后遍历Map,创建A集合对象并将相应的值复制到A对象中。
// 假设B集合为List<MoniLocalSiteHour>类型,A集合为List<MoniLocalSiteHour>
List<MoniLocalSiteHour> bList = ...
// 创建Map,按照主键(datatime + stationcode)分组
Map<String, MoniLocalSiteHour> map = new HashMap<>();
for (MoniLocalSiteHour b : bList) {
String key = b.getDatatime().getTime() + "_" + b.getStationcode();
MoniLocalSiteHour a = map.get(key);
if (a == null) {
a = new MoniLocalSiteHour();
a.setDatatime(b.getDatatime());
a.setStationcode(b.getStationcode());
map.put(key, a);
}
// 复制属性值到A对象中
a.setStationname(b.getStationname());
a.setSo2(b.getSo2());
a.setNo2(b.getNo2());
a.setPm25(b.getPm25());
a.setPm10(b.getPm10());
a.setCo(b.getCo());
a.setO3(b.getO3());
a.setPm25iaqi(b.getPm25iaqi());
a.setSo2iaqi(b.getSo2iaqi());
a.setNo2iaqi(b.getNo2iaqi());
a.setPm10iaqi(b.getPm10iaqi());
a.setCoiaqi(b.getCoiaqi());
a.setO3iaqi(b.getO3iaqi());
a.setAqi(b.getAqi());
a.setPrimarypol(b.getPrimarypol());
a.setAqilevel(b.getAqilevel());
a.setO38h(b.getO38h());
}
// 将Map中的值存入A集合中
List<MoniLocalSiteHour> aList = new ArrayList<>(map.values());
该回答引用ChatGPTjava
// 定义Map,key为站点code,value为B
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
本题涉及到多对一的问题,我们需要将B集合转存为A集合。具体实现可以使用Map来存储B集合中的数据,以A集合的主键为key,value为B集合数据。然后遍历A集合,通过主键在Map中查找对应的B集合数据,最终实现转换。
具体代码实现如下:
List<MoniLocalSiteHour> aList = new ArrayList<MoniLocalSiteHour>();
List<StationHourOrDayData> bList = new ArrayList<StationHourOrDayData>();
// 将B集合转成Map,以主键为key,value为B集合数据
Map<String, List<StationHourOrDayData>> bMap = new HashMap<String, List<StationHourOrDayData>>();
for (StationHourOrDayData b : bList) {
String key = b.getStationId() + "#" + DateUtil.format(b.getCollectDatetime(), "yyyy-MM-dd HH:mm:ss");
if (bMap.containsKey(key)) {
List<StationHourOrDayData> list = bMap.get(key);
list.add(b);
bMap.put(key, list);
} else {
List<StationHourOrDayData> list = new ArrayList<StationHourOrDayData>();
list.add(b);
bMap.put(key, list);
}
}
// 遍历A集合,通过主键在Map中查找对应的B数据,最终实现转换
for (MoniLocalSiteHour a : aList) {
String key = a.getStationcode() + "#" + DateUtil.format(a.getDatatime(), "yyyy-MM-dd HH:mm:ss");
if (bMap.containsKey(key)) {
List<StationHourOrDayData> bDataList = bMap.get(key);
for (StationHourOrDayData bData : bDataList) {
// 将B数据转换成A数据
a.setSo2(bData.getPollutantType().equals("so2") ? bData.getPollutantValue() : a.getSo2());
a.setNo2(bData.getPollutantType().equals("no2") ? bData.getPollutantValue() : a.getNo2());
a.setPm25(bData.getPollutantType().equals("pm25") ? bData.getPollutantValue() : a.getPm25());
a.setPm10(bData.getPollutantType().equals("pm10") ? bData.getPollutantValue() : a.getPm10());
a.setCo(bData.getPollutantType().equals("co") ? new BigDecimal(bData.getPollutantValue()) : a.getCo());
a.setO3(bData.getPollutantType().equals("o3") ? bData.getPollutantValue() : a.getO3());
a.setAqi(bData.getPollutantType().equals("aqi") ? bData.getPollutantValue() : a.getAqi());
}
}
}
需要注意的是,这里使用了时间和站点code作为A集合的主键,因此在转换前需要确保A集合和B集合中的这两个字段值是唯一的。
如果我的回答解决了您的问题,请采纳!
java mybatis 一对多和多对一处理
讲的非常详细,可以借鉴下
https://blog.csdn.net/qq_40197728/article/details/118887249