2017-05-08 85 views
-6

我有一个数组列表与时间。我想按时间升序排序。 我用这个,但它不输出我想要的。随着时间排序Arraylist

List<String> l = new ArrayList<>(); 
l.add("12:20 PM"); 
l.add("12:32 PM"); 
l.add("12:30 PM"); 
l.add("12:10 PM"); 
l.add("12:08 PM"); 
l.add("12:00 PM"); 
Collections.sort(l, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
    try { 
     return new SimpleDateFormat("h:mm a").parse(o1).compareTo(new SimpleDateFormat("hh:mm a").parse(o2)); 
    } catch (ParseException e) { 
     return 0; 
    } 
    } 
}); 
System.out.println(l); 

我需要:

12:00 PM 
12:08 PM 
12:10 PM... 

同样

+0

你得到了吗?...... –

+0

这已经被蜜蜂回答了。事实上,几乎相同的标题。 – ItamarG3

+1

也许是一个小错误,但格式不同。你有一个“h:mm a”,另一个有“hh:mm a”。 –

回答

1

让我们从这里开始:

} catch (ParseException e) { 
    return 0; 
} 

ParseException的手段解析出了问题。您正在压制并将其变为:两个字符串等于相同的时间。

只是不这样做。

然后我还建议不是存储字符串,但在该列表中的日期对象。你必须明白,每个比较都会导致这些格式化步骤。换句话说,对字符串进行排序而不是日期会造成巨大的开销!

换句话说,首先将所有字符串转换为日期,然后对日期进行排序。

0

您的日期格式是错误的:

try { 
    return new SimpleDateFormat("h:mm a").parse(o1).compareTo(new SimpleDateFormat("hh:mm a").parse(o2)); 
} catch (ParseException e) { 
    return 0; 
} 

应该hh:mm a因为有两个数字代表在你的例子小时。

这是由于您的字符串与格式不匹配导致ParseException。将异常处理为将字符串视为相同。这不是处理该错误的好方法。

因此,由于没有字符串匹配格式,所以每个比较都会导致异常,将字符串视为相同,因此没有任何内容会重新排序。

+0

在我的电脑上,它使用'h:mm a'很好地和正确地解析,即使在'12:20 PM'的小时内有两位数字,等等。 –