实体类集合多个字段组合排序,自由组合升降序,下面是参考代码示例:
import lombok.Data;
@Data
public class DbjrdmxDTO {
private String djbh;
private String rq; //订单日期
private String ckdm;
private String ckmc;
private String newKhSign; //新客户标记 1
private String khdm;
private String khmc;
private String khGrade; //客户等级
private String khzydm;
private String khzymc;
private String fkrq;
private Integer mibh;
private String spdm;
private String spmc;
private Integer sl; //未通知数量
private Integer sl1; //本次执行数量
public DbjrdmxDTO() {
}
public DbjrdmxDTO(String rq, String newKhSign, String khGrade, Integer mibh, String spdm) {
this.rq = rq;
this.newKhSign = newKhSign;
this.khGrade = khGrade;
this.mibh = mibh;
this.spdm = spdm;
}
}
public static void main(String[] args) {
List<DbjrdmxDTO> list=new ArrayList<>();
list.add(new DbjrdmxDTO("2023-07-10", "0", "02", 1, "24281"));
list.add(new DbjrdmxDTO("2023-07-8", "0", "01", 2, "12428"));
list.add(new DbjrdmxDTO("2023-07-10", "1", "01", 3, "41228"));
list.add(new DbjrdmxDTO("2023-07-11", "0", "03", 4, "41228"));
list.add(new DbjrdmxDTO("2023-07-11", "1", "03", 5, "24281"));
list.add(new DbjrdmxDTO("2023-07-11", "1", "03", 6, "41228"));
list.add(new DbjrdmxDTO("2023-07-12", "0", "03", 7, "12428"));
list.add(new DbjrdmxDTO("2023-07-11", "1", "03", 8, "41228"));
Comparator<DbjrdmxDTO> comparator=Comparator.comparing(DbjrdmxDTO::getNewKhSign,Comparator.reverseOrder()); //新客户排在最前(值倒序)
comparator.thenComparing(DbjrdmxDTO::getKhGrade); //再按客户等级升序排序
comparator.thenComparing(DbjrdmxDTO::getRq); //再按订单日期升序排序
comparator.thenComparing(DbjrdmxDTO::getSpdm); //再按商品代码升序排序
list.sort(comparator);
for(DbjrdmxDTO mx:list){
System.out.println(JSON.toJSONString(mx));
}
}
排序结果如图: