我有一个我尝试排序的某个类的ArrayList,但是在排序过程中我得到一个NullPointerException。 我用try-catch包装了我的命令,以便找到数组中的哪个元素导致异常。 我如何检查捕获量以找出哪个是有问题的元素?
以下是代码:
List<SingleMeasurementValuePoint> sortedList = new ArrayList<SingleMeasurementValuePoint>(deviceMeasurementPoints);
try {
Collections.sort(sortedList, new TimeAndComponentSort());
} catch (Exception e) {
System.out.println();
}
比较器中的代码,即TimeAndComponentSort是:
public class TimeAndComponentSort implements Comparator<SingleMeasurementValuePoint> {
@Override
public int compare(SingleMeasurementValuePoint point1, SingleMeasurementValuePoint point2) {
int val = point1.compareTo(point2);
if (val == 0) {
return point1.getComponentId().compareTo(point2.getComponentId());
}
else {
return val;
}
}
}
答案 0 :(得分:0)
我不认为您可以查看堆栈跟踪并确定List
中的哪个元素是null
。如果您的null
中包含List
个元素,则最简单的解决方法可能是修复您的Comparator
以处理null
(s)。此外,您可以使用Comparator
记录null
(s)。基本上,像
@Override
public int compare(SingleMeasurementValuePoint point1,
SingleMeasurementValuePoint point2) {
if (point1 == null && point2 == null) {
System.out.println("null point1 and point2");
return 0;
} else if (point1 == null) {
System.out.println("null point1");
return -1;
} else if (point2 == null) {
System.out.println("null point2");
return 1;
}
int val = point1.compareTo(point2);
if (val == 0) {
return point1.getComponentId().compareTo(
point2.getComponentId());
} else {
return val;
}
}
仍然没有告诉你原始索引是null
的哪个元素。如果这是您真正需要的,那么您可以编写一个方法来返回第一个null
(或-1
)的索引,如
public static <T> int findFirstNull(List<T> al) {
for (int i = 0, len = al.size(); i < len; i++) {
if (al.get(i) == null) {
return i;
}
}
return -1;
}
最后,您的catch
块应记录其Exception
} catch (Exception e) {
// System.out.println();
e.printStackTrace();
}