元素未硬编码时带有排序列表的运行时错误

时间:2015-08-06 05:56:01

标签: java arrays list

我正在根据自定义排序对字符串数组列表进行排序。当我将条目硬编码到列表中时,一切正常。但是,当我按代码生成条目时,我收到错误。你能解释一下我出了什么问题吗?

硬代码

list.add(new String[] {"A", "B", "C", "D", "F"});

真实代码

String[] varriables = new String[5];
// Sperate fix message
String[] breakDown = strLine.split("\\|");

// Build sub array for sorting
for (String s : breakDown) {
    if (s.startsWith("55=")) {
        varriables[0] = s.substring(3);
    } else if (s.startsWith("1=")) {
        varriables[1] = s.substring(2);
    } else if (s.startsWith("109=")) {
        varriables[2] = s.substring(4);
    } else if (s.startsWith("54=")) {
        varriables[3] = s.substring(3);
    }
    varriables[4] = strLine;
}
list.add(varriables);

排序(第113行)

list.sort(byIndices(2, 3));

错误

Exception in thread "main" java.lang.NullPointerException
    at java.util.Comparator.lambda$comparing$77a9974f$1(Unknown Source)
    at java.util.Comparator$$Lambda$2/41359092.compare(Unknown Source)
    at java.util.Comparator.lambda$thenComparing$36697e65$1(Unknown Source)
    at java.util.Comparator$$Lambda$4/821270929.compare(Unknown Source)
    at java.util.TimSort.countRunAndMakeAscending(Unknown Source)
    at java.util.TimSort.sort(Unknown Source)
    at java.util.Arrays.sort(Unknown Source)
    at java.util.ArrayList.sort(Unknown Source)
    at Foo.main(Foo.java:113)

修改

byIndi​​ces

static Comparator<String[]> byIndices(int first, int... rest) {
        Comparator<String[]> comparator = comparing((array) -> array[first]);
        for (int index : rest) {
            comparator = comparator.thenComparing((array) -> array[index]);
        }
        return comparator;
    }

声明列表

List<String[]> list = new ArrayList<>();

1 个答案:

答案 0 :(得分:0)

问题在于有时值是无效的。感谢您的评论。添加此内容以修复:

varriables[0] = "";
varriables[1] = "";
varriables[2] = "";
varriables[3] = "";