2010-10-18 62 views
1
//dd/mm/yyyy 
list<String> datesList 

//weeks of year 
list<int> weeksList 

//month 
list<int> monthsList 

我想按升序排列所有这些,最有效的方法是什么? (特别是日期列表,这是一个字符串列表,每个项目都有条目dd/mm/yyyy)。什么是排序日期,星期和月份列表的最有效方式?

+2

如何将'dd/mm/yyyy'字符串解析为java.util.Date'?更清晰的排序,您可以随时将它们转换为格式化的字符串,然后您需要呈现(打印/导出)它们。 – eumiro 2010-10-18 12:54:00

+1

我第二。我相信日期有一个比较器,可以帮助很多。如果使用适当的比较器进行排序,则不需要TreeSet。 – duffymo 2010-10-18 12:56:57

回答

6

由于没有人发布它,我必须:Collections.sort
对于日期,如eumiro建议的,最简单的方法可能是将它们转换为Date对象然后进行排序。

+0

这是正确的答案。 – duffymo 2010-10-18 13:19:02

2
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); 
1

方法如下:

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] 
0

创造出比较前每个字符串日期转换为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); 
+0

有一个java.util.Date的默认比较器。如果处理Date对象,则无需编写任何内容。 – duffymo 2010-10-18 13:18:28

相关问题