@Override
public int compare(){
}
这个错就是这个方法报出来的
原因是compare方法没有对空值进行判断,所以传进去的不能是空
所以应该先判断是否为空,在进行判断大小
例如我原来的代码是:
Collections.sort(list, new Comparator<DealerComplaintFollow>() {
@Override
public int compare(DealerComplaintFollow o1, DealerComplaintFollow o2) {
if (FOUR_HOUR_FOLLOW.equals(filed)) {
return o1.getFourHourFollowRate() > o2.getFourHourFollowRate() ? -1 : 1;
} else if (CLOSED.equals(filed)) {
return o1.getComplaintCloseRate() > o2.getComplaintCloseRate() ? -1 : 1;
} else if (AVERAGE_FOLLOW_DURATION.equals(filed)) {
return o1.getAverageFollowDuration() > o2.getAverageFollowDuration() ? 1 : -1;
} else if (AVERAGE_CLOSED_DURATION.equals(filed)) {
return o1.getAverageCloseDuration() > o2.getAverageCloseDuration() ? 1 : -1;
}
return 0;
}
});
修改之后的代码就应该是:
Collections.sort(list, new Comparator<DealerComplaintFollow>() {
@Override
public int compare(DealerComplaintFollow o1, DealerComplaintFollow o2) {
if (FOUR_HOUR_FOLLOW.equals(filed)) {
if (Objects.isNull(o1.getFourHourFollowRate()) && Objects.isNull(o2.getFourHourFollowRate())){
return 0;
}else if (Objects.isNull(o1.getFourHourFollowRate())){
return 1;
}else if (Objects.isNull(o2.getFourHourFollowRate())){
return -1;
}
return o1.getFourHourFollowRate() > o2.getFourHourFollowRate() ? -1 : 1;
} else if (CLOSED.equals(filed)) {
if (Objects.isNull(o1.getComplaintCloseRate()) && Objects.isNull(o2.getComplaintCloseRate())){
return 0;
}else if (Objects.isNull(o1.getComplaintCloseRate())){
return 1;
}else if (Objects.isNull(o2.getComplaintCloseRate())){
return -1;
}
return o1.getComplaintCloseRate() > o2.getComplaintCloseRate() ? -1 : 1;
} else if (AVERAGE_FOLLOW_DURATION.equals(filed)) {
if (Objects.isNull(o1.getAverageFollowDuration()) && Objects.isNull(o2.getAverageFollowDuration())){
return 0;
}else if (Objects.isNull(o1.getAverageFollowDuration())){
return -1;
}else if (Objects.isNull(o2.getAverageFollowDuration())){
return 1;
}
return o1.getAverageFollowDuration() > o2.getAverageFollowDuration() ? 1 : -1;
} else if (AVERAGE_CLOSED_DURATION.equals(filed)) {
if (Objects.isNull(o1.getAverageCloseDuration()) && Objects.isNull(o2.getAverageCloseDuration())){
return 0;
}else if (Objects.isNull(o1.getAverageCloseDuration())){
return -1;
}else if (Objects.isNull(o2.getAverageCloseDuration())){
return 1;
}
return o1.getAverageCloseDuration() > o2.getAverageCloseDuration() ? 1 : -1;
}
return 0;
}
});
return啥结果 根据你想进行排序的顺序决定
文章讨论了在使用Java的Collections.sort方法进行排序时,Comparator的compare方法如果没有处理空值可能导致的问题。作者给出了原始代码,其中在比较对象属性时没有检查null值。为了解决这个问题,作者展示了修改后的代码,增加了对每个比较属性的空值检查,确保在比较前进行适当的处理,从而避免运行时异常。
1728

被折叠的 条评论
为什么被折叠?



