背景:
订单实体类order中存在十几个属性,若客户名称、产品名称和联系电话相同则判断为同一订单,需要对list中相同订单进行去重。
解决思路:
利用contains方法进行去重。contains方法使用元素的 equals方法来判断是否相等。在 Java 中,两个对象如果通过 equals 方法比较返回 true,则被视为相等。
具体的做法:
1、创建一个简化版订单实体类(只包含需要比较去重的属性)。
2、创建一个新的List对象,用于存放去重后的元素。
3、遍历原始的List对象,对于每一个元素,使用contains方法判断新List中是否已经存在该元素。
4、如果新List中不存在该元素,则将该元素添加到新List中。
5、最后,新List中的元素就是去重后的结果。 示例代码如下:
订单类order:
@Data
public class OrderDTO {
@ApiModelProperty(value = "订单编号")
private String orderCode;
@ApiModelProperty(value = "客户名称")
private String custName;
@ApiModelProperty(value = "客户联系电话")
private String custPhoneNumber;
@ApiModelProperty(value = "居住地址")
private String address;
@ApiModelProperty(value = "产品类型")
private String productType;
@ApiModelProperty(value = "产品名称")
private String productName;
@ApiModelProperty(value = "推荐人名称")
private String referEmpName;
@ApiModelProperty(value = "推荐人手机号")
private String referEmpPhone;
}
简化版订单实体类smallOrder(只包含用于比较去重的属性):
@Data
public class SmallCrmLoanOrderDTO {
@ApiModelProperty(value = "客户名称")
private String custName;
@ApiModelProperty(value = "联系电话")
private String phoneNumber;
@ApiModelProperty(value = "产品名称")
private String productName;
}
利用contains方法对list去重:
//原始订单对象列表
List<OrderDTO> orderDTOS = new ArrayList<>();
//用于存储去重后的对象
List<SmallOrderDTO> validatedOrderDTOS = new ArrayList<>();
for(OrderDTO dto : orderDTOS ){
SmallOrderDTO smallOrderDTO = new SmallOrderDTO();
BeanUtils.copyProperties(dto, smallOrderDTO);
if (!validatedOrderDTOS.contains(smallOrderDTO)) {
validatedOrderDTOS.add(smallOrderDTO);
}
}