【Java】集合对象如何实现自然排序和定制排序?

 1实体类对象。

要想实现自然排序就需要实现Comparable接口,重写comparaTo()方法,

定制排序就不用实现Comparable接口,重写comparaTo()方法。直接采用匿名内部类new Comparator,重写compara()方法。

// 泛型为需要排队的对象
public class Emp implements Comparable<Emp>{
    private Long id;
    private String name;

    public Emp() {
    }
    
    @Override
    public String toString() {
        return "Emp{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    public Emp(Long id, String name) {
        this.id = id;
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    /**
     * 实现comparable接口重写comparaTo方法
     * 实现自然排序
     * */
    @Override
    public int compareTo(Emp o) {
        // 自带方法,通过id进行排序
        return this.getId().compareTo(o.getId());
        // 会根据大于0小于0等于0实现升序降序
        //Long diff = this.getId() - o.getId();
        //return diff.intValue();
    }
}

2测试类

public class SortTest {
    // 第一种实现自然排序【实体类实现Comparable接口,重写comparaTo()方法】
    public static void listSort(){
        // 转换成集合对象
        List<Integer> arrs = Arrays.asList(1,5,4,8);
        //按照自然顺序的升续排序,列表中的元素必须实现 Comparable 接口 , Integer是实现了的
        Collections.sort(arrs);
        arrs.forEach(System.out::println);
    }

    // 第二种实现,直接采用匿名内部类new Comparator,重写compara()方法【实体类不需要实现和重写】
    public static void empListSort(){
        List<Emp> arrs = Arrays.asList(
                new Emp(10L,"xx"),
                new Emp(3L,"xx"),
                new Emp(4L,"xx"),
                new Emp(7L,"xx") );

        //按照定制顺序的升续排序,列表中的元素必须实现 Comparable 接口 , Integer是实现了的
        Collections.sort(arrs,new Comparator<Emp>(){

            @Override
            public int compare(Emp o1, Emp o2) {
                return o1.getId().compareTo(o2.getId());
            }
        });
        arrs.forEach(System.out::println);
    }

    // main方法直接进行测试
    public static void main(String[] args) {
        listSort(); // 自然排序
        empListSort(); // 定制排序
        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mxin5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值