//dd/mm/yyyy
list<String> datesList
//weeks of year
list<int> weeksList
//month
list<int> monthsList
我想按升序排列所有這些,最有效的方法是什麼? (特別是日期列表,這是一個字符串列表,每個項目都有條目dd/mm/yyyy)。什麼是排序日期,星期和月份列表的最有效方式?
//dd/mm/yyyy
list<String> datesList
//weeks of year
list<int> weeksList
//month
list<int> monthsList
我想按升序排列所有這些,最有效的方法是什麼? (特別是日期列表,這是一個字符串列表,每個項目都有條目dd/mm/yyyy)。什麼是排序日期,星期和月份列表的最有效方式?
由於沒有人發佈它,我必須:Collections.sort。
對於日期,如eumiro建議的,最簡單的方法可能是將它們轉換爲Date對象然後進行排序。
這是正確的答案。 – duffymo 2010-10-18 13:19:02
java.util.List<String> dates = Arrays.asList("05/07/2010", "12/12/1984", "28/01/2008");
System.out.println("unsorted dates = " + dates);
Collections.sort(dates, new Comparator<String>()
{
@Override
public int compare(String o1, String o2)
{
String y1 = o1.substring(6, 10);
String y2 = o2.substring(6, 10);
if (y1.equals(y2))
{
String m1 = o1.substring(3, 5);
String m2 = o2.substring(3, 5);
if (m1.equals(m2))
{
return m1.compareTo(y2);
}
String d1 = o1.substring(0, 2);
String d2 = o2.substring(0, 2);
return d1.compareTo(d2);
}
return y1.compareTo(y2);
}
});
System.out.println("sorted dates = " + dates);
方法如下:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
public class DateSortExample
{
public static void main(String[] args)
{
DateFormat format = new SimpleDateFormat("yyyy-MMM-dd");
List<Date> values = new ArrayList<Date>();
for (String arg : args)
{
try
{
Date value = format.parse(arg);
values.add(value);
}
catch (ParseException e)
{
e.printStackTrace();
}
}
System.out.println("before sort: " + values);
Collections.sort(values);
System.out.println("after sort: " + values);
}
}
這裏的輸出:
before sort: [Mon Oct 18 00:00:00 EDT 2010, Mon Jan 04 00:00:00 EST 1999, Wed Dec 25 00:00:00 EST 1968]
after sort: [Wed Dec 25 00:00:00 EST 1968, Mon Jan 04 00:00:00 EST 1999, Mon Oct 18 00:00:00 EDT 2010]
創造出比較前每個字符串日期轉換爲Date對象的比較。
List<String> dates = Arrays.asList("05/07/2010", "12/12/1984", "28/01/2008");
final DateFormat fmt = new SimpleDateFormat("dd/mm/yyyy");
Collections.sort(dates, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
try {
return fmt.parse(o1).compareTo(fmt.parse(o2));
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
});
System.out.println(dates);
有一個java.util.Date的默認比較器。如果處理Date對象,則無需編寫任何內容。 – duffymo 2010-10-18 13:18:28
如何將'dd/mm/yyyy'字符串解析爲java.util.Date'?更清晰的排序,您可以隨時將它們轉換爲格式化的字符串,然後您需要呈現(打印/導出)它們。 – eumiro 2010-10-18 12:54:00
我第二。我相信日期有一個比較器,可以幫助很多。如果使用適當的比較器進行排序,則不需要TreeSet。 – duffymo 2010-10-18 12:56:57