背景
多个字段再进行,字符串拼接的过程中,需要格外留意待拼接的字段的类型,如果是数值类型的话,则需要小心出现bug。
如:String str = item.getSkuId() item.getSkuType() item.getClassicId() item.getCurrency() item.getStartTime() ;
各个字段的值分别是:101、1、1101、CNY、1687624332000
你期望的输出是:10111101CNY1687624332000
但实际的输出确是:1203CNY1687624332000
代码
代码语言:javascript复制public class ClassicPriceSettingReqDto {
private Integer skuId;
private Byte skuType;
private Long classicId;
private String currency;
private Long startTime;
public Integer getSkuId() {
return skuId;
}
public Byte getSkuType() {
return skuType;
}
public Long getClassicId() {
return classicId;
}
public String getCurrency() {
return currency;
}
public Long getStartTime() {
return startTime;
}
}
出错的写法
代码语言:javascript复制Set<String> existsDataSet = new HashSet<>();
for (ClassicPriceSettingReqDto item : reqDtoList) {
// 按照指定字段进行去重,前三个字段均为数值类型,而我想要的是字符串的拼接效果
String str = item.getSkuId() item.getSkuType() item.getClassicId() item.getCurrency() item.getStartTime() ;
if (existsDataSet.contains(str)) {
log.warn("This data already exists {}", str);
continue;
}
existsDataSet.add(str);
}
正确的写法
代码语言:javascript复制Set<String> existsDataSet = new HashSet<>();
for (ClassicPriceSettingReqDto item : reqDtoList) {
// 按照指定字段进行去重
String str = item.getSkuId() "-" item.getSkuType() "-" item.getClassicId() "-" item.getCurrency() "-" item.getStartTime() ;
if (existsDataSet.contains(str)) {
log.warn("This data already exists {}", str);
continue;
}
existsDataSet.add(str);
}