抛出异常时,异常的元素会放到末尾(不再比较,不再往后按照新的属性比较。异常的元素依然存在)
package com.company;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* @Author you guess
* @Date 2021/1/8 11:05
* @Version 1.0
* @Desc
*/
class Mobile {
private String length;
private String name;
public Mobile(String length, String name) {
this.length = length;
this.name = name;
}
public String getLength() {
return length;
}
public void setLength(String length) {
this.length = length;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Mobile{" +
"length=" + length +
", name='" + name + '\'' +
'}';
}
}
public class Main28 {
public static void main(String[] args) {
List<Mobile> list = new ArrayList<>();
list.add(new Mobile("12", "xiaomi1"));
list.add(new Mobile("13", "apple"));
list.add(new Mobile("12", "xiaomi2"));
list.add(new Mobile("9", "huawei"));
list.add(new Mobile("8", "oppo"));
list.add(new Mobile(null, "vivo2"));
list.add(new Mobile(null, "vivo1"));
list.add(new Mobile("", "vivo1"));
list.add(new Mobile("", "vivo3"));
Collections.sort(list, new Comparator<Mobile>() {
@Override
public int compare(Mobile o1, Mobile o2) {
try {
int lengthSeq = 0;
lengthSeq = Long.valueOf(o1.getLength()).compareTo(Long.valueOf(o2.getLength()));
if (lengthSeq == 0) {
return Integer.compare(o1.getName().compareTo(o2.getName()), 0);
}
return lengthSeq;
} catch (Exception e) {
e.printStackTrace();
System.err.println("sort err111" + "000000000000");
}
return 0;
}
});
for (Mobile ele : list) {
System.out.println(ele.toString());
}
//会抛出异常,但是转为Long异常的记录会放到末尾(不再比较,不再往后按照新的属性比较)
// Mobile{length=8, name='oppo'}
// Mobile{length=9, name='huawei'}
// Mobile{length=12, name='xiaomi1'}
// Mobile{length=12, name='xiaomi2'}
// Mobile{length=13, name='apple'}
// Mobile{length=null, name='vivo2'}
// Mobile{length=null, name='vivo1'}
// Mobile{length=, name='vivo1'}
// Mobile{length=, name='vivo3'}
}//main
}
注意看输出的结果!!
................
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:601)
at java.lang.Long.valueOf(Long.java:803)
at com.company.Main28$1.compare(Main28.java:70)
at com.company.Main28$1.compare(Main28.java:65)
at java.util.TimSort.binarySort(TimSort.java:296)
at java.util.TimSort.sort(TimSort.java:221)
at java.util.Arrays.sort(Arrays.java:1512)
at java.util.ArrayList.sort(ArrayList.java:1462)
at java.util.Collections.sort(Collections.java:177)
at com.company.Main28.main(Main28.java:65)
sort err111000000000000
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:601)
at java.lang.Long.valueOf(Long.java:803)
at com.company.Main28$1.compare(Main28.java:70)
at com.company.Main28$1.compare(Main28.java:65)
at java.util.TimSort.binarySort(TimSort.java:296)
at java.util.TimSort.sort(TimSort.java:221)
at java.util.Arrays.sort(Arrays.java:1512)
at java.util.ArrayList.sort(ArrayList.java:1462)
at java.util.Collections.sort(Collections.java:177)
at com.company.Main28.main(Main28.java:65)
sort err111000000000000
Mobile{length=8, name='oppo'}
Mobile{length=9, name='huawei'}
Mobile{length=12, name='xiaomi1'}
Mobile{length=12, name='xiaomi2'}
Mobile{length=13, name='apple'}
Mobile{length=null, name='vivo2'}
Mobile{length=null, name='vivo1'}
Mobile{length=, name='vivo1'}
Mobile{length=, name='vivo3'}
jdk1.8