首先贴出报错代码
public static void main(String[] args) {
List<Integer> ases = new ArrayList<>(Arrays.asList( -1, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, -1, 0, 1, 1, 1, 0, 0, 0, 0, -1, 1, 1, 1, 1, -1, -1, -1, -1,1));
ases.sort((o1,o2) -> o1>o2?1:-1);
System.out.println(ases);
}
这一段代码因为没判断相等情况,会抛出 IllegalArgumentException: Comparison method violates its general contract! 报错。
但是为什么在下面这段代码中同样没判断相等情况,但是却并不会抛出这个错误呢?
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("2020-04-01");
list.add("2020-04-02");
list.add("2020-04-02");
list.add("2020-04-02");
list.add("2020-04-02");
list.add("2020-04-01");
list.add("2020-04-02");
list.add("2020-04-02");
list.add("2020-04-03");
list.add("2020-04-02");
list.add("2020-04-02");
list.add("2020-04-02");
list.add("2020-04-02");
list.add("2020-04-01");
list.add("2020-04-02");
list.add("2020-04-03");
list.add("2020-04-03");
list.add("2020-04-03");
list.add("2020-04-02");
list.add("2020-04-02");
list.add("2020-04-02");
list.add("2020-04-02");
list.add("2020-04-01");
list.add("2020-04-03");
list.add("2020-04-03");
list.add("2020-04-03");
list.add("2020-04-03");
list.add("2020-04-01");
list.add("2020-04-01");
list.add("2020-04-01");
list.add("2020-04-01");
list.add("2020-04-03");
System.out.println(list.size());
System.out.println(getDataList(list));
}
public static List<String> getDataList(List<String> list){
list.sort((o1,o2) -> getDate(o1).before(getDate(o2))? -1:1);
return list;
}
private static Date getDate(String date){
try {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date result = dateFormat.parse(date);
return result;
}catch (Exception e){
e.printStackTrace();
}
return null;
}