我正在像excel中的电子表格一样阅读.csv文件。有一定数量的列,由文件确定,我使用.split(",")方法将每一行读入字符串数组。然后,我将其放入数组列表中,这样它就可以容纳所有字符串数组,而无需指定特定大小。但是,当我使用Collections.sort()对数组列表进行排序时,程序将中断。可能是什么问题?这是我要排序的代码:

Collections.sort(stringList, new Comparator < String[] > () {
    public int compare(String[] strings, String[] otherStrings) {
        return -1 * (strings[sortNum].compareTo(otherStrings[sortNum]));
    }
});

最佳答案

两点:

  • 不要将compare的结果乘以-1来反转比较。 Integer.MIN_VALUE * -1仍然是Integer.MIN_VALUE。相反,可以颠倒比较本身的顺序
  • 我的猜测是您实际上有一些行而没有足够的列。也许您应该把那些放在最后?

  • 就像是:
    Collections.sort(stringList, new Comparator < String[] > () {
        public int compare(String[] x1, String[] x2) {
            if (x1.length > sortNum && x2.length > sortNum) {
                return x2[sortNum].compareTo(x1[sortNum]);
            }
            if (x1.length > sortNum) {
                return 1;
            }
            if (x2.length > sortNum) {
                return -1;
            }
            return x2.length - x1.length;
        }
    });
    

    或者,首先过滤列表以确保所有行都有足够的列。

    07-26 01:56