常用类20-Java比较器之Comparator(定制排序)

内容分享2周前发布
0 0 0

解决的问题:

元素的类型没有实现java.lang.Comparable接口,又不方便修改代码,或实现了java.lang.Comparable接口的排序规则不适合当前操作,可以思考Comparator的对象来排序。


代码示例1:

@Test

//定制排序

public void test2(){

    String[] arr =new String[]{“AA”,”DD”,”KK”,”ZZ”,”MM”,”BB”,”EE”,”OO”};

    Arrays.sort(arr,new Comparator() {

@Override

    public int compare(String o1, String o2) {

        if(o1instanceof String && o2instanceof String){

            String s1 = (String)o1;

            String s2 = (String)o2;

            return -s1.compareTo(s2);

        }

        throw new RuntimeException(“输入的数据类型不一致”);

    }

    });

    System.out.println(Arrays.toString(arr));//[ZZ, OO, MM, KK, EE, DD, BB, AA]

 }

代码示例2:

@Test

public void test2(){

    Goods[] arr =new Goods[6];

    arr[0] =new Goods(“desk”,30);

    arr[1] =new Goods(“bed”,200);

    arr[2] =new Goods(“door”,150);

    arr[3] =new Goods(“sofa”,300);

    arr[4] =new Goods(“pillow”,200);

    arr[5] =new Goods(“pillow”,300);

    Arrays.sort(arr,new Comparator() {

    //按照产品名称顺序排列,再按照价格从高到低排序

   @Override

   public int compare(Goods o1, Goods o2) {

        if(o1instanceof Goods && o2instanceof Goods) {

            Goods g1 = (Goods) o1;

            Goods g2 = (Goods) o2;

            if (g1.getName().equals(g2.getName())) {

                return -Double.compare(g1.getPrice(), g2.getPrice());

            }else {

                return g1.getName().compareTo(g2.getName());

        }

    }

    throw new RuntimeException(“数据类型错误”);

    }

});

    System.out.println(Arrays.toString(arr));

}

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...