Java 到目前为止对集合进行排序

Java 到目前为止对集合进行排序,java,sorting,collections,Java,Sorting,Collections,我正在按如下方式对集合wrt date进行排序,但在集合中某些日期字段为空,排序不正确 public class DateComparator implements Comparator<MyList>{ private static boolean isAscending; private static final String TAG = "DateComparator"; public static boolean isAscending() {

我正在按如下方式对集合wrt date进行排序,但在集合中某些日期字段为空,排序不正确

public class DateComparator implements Comparator<MyList>{
    private static boolean isAscending;
    private static final String TAG = "DateComparator";


    public static boolean isAscending() {
        return isAscending;
    }


    public static void setAscending(boolean isAscending) {
        DateComparator.isAscending = isAscending;
    }


    @Override
    public int compare(MyList lhs, MyList rhs) {
        String pattern = "MM/dd/yyyy";
        try {
            String dueDateLHS = lhs.getDueDate();//some field are null
            String dueDateRHS = rhs.getDueDate();//some field are null

            if(dueDateLHS!=null && dueDateRHS!=null){
                SimpleDateFormat dateFormatLHS = new SimpleDateFormat(pattern);
                SimpleDateFormat dateFormatRHS = new SimpleDateFormat(pattern);
                Date dateLHS = dateFormatLHS.parse(dueDateLHS);
                Date dateRHS = dateFormatRHS.parse(dueDateRHS);
                if(isAscending) 
                    return dateLHS.compareTo(dateRHS);
                else 
                    return dateRHS.compareTo(dateLHS);
            }
        } catch (ParseException e) {
            Log.e(TAG, ""+e.getMessage());
            e.printStackTrace();
        }
        return -1;
    }

}
公共类DateComparator实现Comparator{
私有静态布尔搜索;
私有静态最终字符串标记=“DateComparator”;
公共静态布尔isAscending(){
回归自然;
}
公共静态空集递增(布尔isAscending){
DateComparator.isAscending=isAscending;
}
@凌驾
公共整数比较(MyList lhs、MyList rhs){
字符串模式=“MM/dd/yyyy”;
试一试{
字符串dueDateLHS=lhs.getDueDate();//某些字段为空
字符串dueDateRHS=rhs.getDueDate();//某些字段为空
if(dueDateLHS!=null&&dueDateRHS!=null){
SimpleDataFormat dateFormatLHS=新的SimpleDataFormat(模式);
SimpleDataFormat dateFormatRHS=新的SimpleDataFormat(模式);
Date dateLHS=dateFormatLHS.parse(dueDateLHS);
Date dateRHS=dateFormatRHS.parse(dueDateRHS);
如果(正在搜索)
返回日期lhs.compareTo(dateRHS);
其他的
返回日期Rhs.compareTo(dateLHS);
}
}捕获(解析异常){
Log.e(标记“”+e.getMessage());
e、 printStackTrace();
}
返回-1;
}
}

如何解决此问题?

您没有处理一边为空,另一边为空的情况。您需要添加以下内容:

else if(dueDateLHS == null && dueDateRHS!=null){
  if(isAscending) { 
    return -1;
  } else 
    return 1;
  }
} else if (dueDateLHS != null && dueDateRHS==null){
//etc
} else if (dueDateLHS == null && dueDateRHS==null){
  return 0;
}