我想按日期和名称排序。例如,我有这样的日期
2019 01 01 "CCCC"
2019 02 01 "Aaaa"
2019 03 01 "CCC"
2019 02 01 "BBBB"
2019 03 01 "Aaaa"
2019 01 01 "Aaaa"
我需要按月份(和年份)和字母排序,例如,它必须像这样:
2019 01 01 "Aaaa"
2019 01 01 "CCCC"
2019 02 01 "Aaaa"
2019 02 01 "BBBB"
2019 03 01 "Aaaa"
2019 03 01 "CCC"
我写过这样的代码:
Collections.sort(mainList, new Comparator<DocSet>() {
public int compare(DocSet o1, DocSet o2) {
SimpleDateFormat sdf = new SimpleDateFormat(Until.DATE_FORMAT);
Calendar c1 = null;
try {
String docSetDate1 = ((DocSet) o1).getDate();
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
c1 = Calendar.getInstance();
c1.setTime(sdf.parse(docSetDate1));
}catch (Exception e){}
Calendar c2 = null;
try {
String docSetDate2 = ((DocSet) o2).getDate();
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
c2 = Calendar.getInstance();
c2.setTime(sdf.parse(docSetDate2));
}catch (Exception e){}
int sComp = c1.compareTo(c2);
if (sComp != 0) {
return sComp;
}
String company_name1 = o1.getCompany_name();
String company_name2 = o2.getCompany_name();
return company_name1.compareTo(company_name2);
}
});
但是它仅按日期排序,如下所示:
2019 01 01 "CCCC"
2019 01 01 "Aaaa"
2019 02 01 "Aaaa"
2019 02 01 "BBBB"
2019 03 01 "CCC"
2019 03 01 "Aaaa"
UPD我如何按月份(和年份)和字母排序?我的最终数据必须是这样的:
2019 01 01 "Aaaa"
2019 01 01 "CCCC"
2019 02 01 "Aaaa"
2019 02 01 "BBBB"
2019 03 01 "Aaaa"
2019 03 01 "CCC"
您需要按日期排序,如果日期相等,则按字母顺序排序以获得正确的输出。
sComp == 0
表示日期相等,因此比较company_name
属性:
if (sComp == 0) {
String company_name1 = o1.getCompany_name();
String company_name2 = o2.getCompany_name();
sComp = company_name1.compareTo(company_name2);
}
尝试一下:
Collections.sort(mainList, new Comparator<DocSet>() {
public int compare(DocSet o1, DocSet o2) {
SimpleDateFormat sdf = new SimpleDateFormat(Until.DATE_FORMAT);
Calendar c1 = null;
try {
String docSetDate1 = ((DocSet) o1).getDate();
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
c1 = Calendar.getInstance();
c1.setTime(sdf.parse(docSetDate1));
}catch (Exception e){}
Calendar c2 = null;
try {
String docSetDate2 = ((DocSet) o2).getDate();
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
c2 = Calendar.getInstance();
c2.setTime(sdf.parse(docSetDate2));
}catch (Exception e){}
int sComp = c1.compareTo(c2);
if (sComp == 0) { // dates are equal -> sort by alphebetically
String company_name1 = o1.getCompany_name();
String company_name2 = o2.getCompany_name();
sComp = company_name1.compareTo(company_name2);
}
return sComp ;
}
});