JAVA8 实体类集合多个字段组合排序

    实体类集合多个字段组合排序,自由组合升降序,下面是参考代码示例:

        

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));
        }

    }

排序结果如图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Java 中的 Comparator 接口实现多个字段排序。假设有一个实体类 User,其中包含 name、age、gender 三个字段,可以按照如下方式进行排序: ```java import java.util.*; public class SortUser { public static void main(String[] args) { List<User> userList = new ArrayList<>(); userList.add(new User("Alice", 18, "female")); userList.add(new User("Bob", 20, "male")); userList.add(new User("Charlie", 18, "male")); userList.add(new User("David", 22, "male")); userList.add(new User("Eva", 20, "female")); // 按照 age 升序,gender 降序,name 升序排序 Collections.sort(userList, new Comparator<User>() { @Override public int compare(User u1, User u2) { if (u1.age != u2.age) { return u1.age - u2.age; } else if (!u1.gender.equals(u2.gender)) { return u2.gender.compareTo(u1.gender); } else { return u1.name.compareTo(u2.name); } } }); for (User user : userList) { System.out.println(user); } } static class User { String name; int age; String gender; public User(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + ", gender='" + gender + '\'' + '}'; } } } ``` 输出结果为: ``` User{name='Alice', age=18, gender='female'} User{name='Charlie', age=18, gender='male'} User{name='Eva', age=20, gender='female'} User{name='Bob', age=20, gender='male'} User{name='David', age=22, gender='male'} ``` 可以看到,按照 age 升序、gender 降序、name 升序进行了排序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值