Java 到目前为止对集合进行排序
我正在按如下方式对集合wrt date进行排序,但在集合中某些日期字段为空,排序不正确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() {
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;
}