我正在根据自定义排序对字符串数组列表进行排序。当我将条目硬编码到列表中时,一切正常。但是,当我按代码生成条目时,我收到错误。你能解释一下我出了什么问题吗?
硬代码
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)
修改的
byIndices
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<>();
答案 0 :(得分:0)
问题在于有时值是无效的。感谢您的评论。添加此内容以修复:
varriables[0] = "";
varriables[1] = "";
varriables[2] = "";
varriables[3] = "";