我有一個List<String>
,其中包含從上午8:00到下午4:00的時間列表。在Java中對ArrayList進行排序
當我在輸出中顯示它時,它顯示未排序,當我使用Collections.sort(myList);
時,它將它從下午1:00到上午8:00分類。
如何從上午8:00到下午4:00對列表進行排序?
我有一個List<String>
,其中包含從上午8:00到下午4:00的時間列表。在Java中對ArrayList進行排序
當我在輸出中顯示它時,它顯示未排序,當我使用Collections.sort(myList);
時,它將它從下午1:00到上午8:00分類。
如何從上午8:00到下午4:00對列表進行排序?
不要重新發明輪子,用集合(或lambda表達式標準化Date
List<String> l = new ArrayList<String>();
l.add("8:00 am");
l.add("8:32 am");
l.add("8:10 am");
l.add("1:00 pm");
l.add("3:00 pm");
l.add("2:00 pm");
Collections.sort(l, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
try {
return new SimpleDateFormat("hh:mm a").parse(o1).compareTo(new SimpleDateFormat("hh:mm a").parse(o2));
} catch (ParseException e) {
return 0;
}
}
});
System.out.println(l);
偉大的答案,謝謝。 :) –
不客氣 –
在列表中使用24小時時間格式,然後對其進行排序。
您可以隨時將其恢復爲AM和PM。
將您的字符串轉換爲日期並對日期進行排序。在Java中,你應該總是處理對象,而不是字符串。字符串是名稱或其他文本,當有一個字符串的特殊含義時,您最好將其轉換爲有意義的對象。
這是一個簡短的程序,你想要做什麼。
public static void main(String[] args) throws ParseException {
ArrayList<String> times = new ArrayList<String>();
times.add("8:00 pm");
times.add("8:00 am");
times.add("7:00 pm");
times.add("7:00 am");
ArrayList<Date> dates = new ArrayList<Date>();
DateFormat format = new SimpleDateFormat("h:m a", Locale.ENGLISH);
for(String time : times){
dates.add(format.parse(time));
}
Collections.sort(dates);
System.out.println(dates);
}
步驟:
Collections.sort()
與其他人一樣,我建議不要重新發明輪子,我也建議丟棄舊的和過時的類SimpleDateFormat
和Date
。這些日子我們好多了。
鑑於
static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("h:mm a", Locale.ENGLISH);
我們可以做
Collections.sort(listOfTimeStrings,
Comparator.comparing(
(String s) -> LocalTime.parse(s.toUpperCase(), dtf)));
這將很好地工作了幾百串,也許更多。但是,每次要比較兩個字符串時都會解析每個字符串。這可能是很多次。如果要分析每個字符串只有一次,而不是做:
List<String> sortedList = listOfTimeStrings.stream()
.map(String::toUpperCase)
.map(s -> LocalTime.parse(s, dtf))
.sorted()
.map(dtf::format)
.map(String::toLowerCase)
.collect(Collectors.toList());
我已經從字面上看它,當你給上午和下午在小寫,所以我將在分析之前爲大寫並返回格式化後小寫。根據您的數據,您可以跳過這些步驟。
在列表中使用24小時時間格式,然後對其進行分類。 您可以隨時將其還原爲AM和PM。 – Rohit5k2