Showmethemoney_ 2020-04-21 15:31 采纳率: 0%
浏览 508

List.sort()排序报错的问题?

首先贴出报错代码

 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;
    }
  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2020-04-21 15:31
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算