解决的问题:
元素的类型没有实现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));
}


