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

时间:2012-03-22 06:23:04

标签: java sorting collections

我正在按照以下方式对集合wrt日期进行排序,但在集合中,某些日期字段为空,并且未正确排序。

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;
    }

}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您不处理一方为空而另一方不为空的情况。您需要添加以下内容:

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;
}
相关问题