我有List<String>
,其中包含从上午8:00到下午4:00的时间列表。
当我在输出中显示它时,它显示未排序,当我使用Collections.sort(myList);
时,它会从下午1:00到8:00进行排序。
如何从早上8点到下午4点对列表进行排序?
答案 0 :(得分:9)
不要重新发明轮子,使用集合(如果允许java8,则使用Lambdas) 怎么样??: 保持列表为字符串,但使用匿名比较器,在那里,将字符串解析为日期,比较它们,你有它。 这里有一个片段:
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);
答案 1 :(得分:2)
将字符串转换为日期并对日期进行排序。在Java中,您应该始终按原样处理对象,而不是字符串。字符串是名称或其他文本,当字符串有特殊含义时,您最好将其转换为有意义的对象。
答案 2 :(得分:0)
在列表中使用24小时时间格式,然后对其进行排序。
您可以随时将其还原为AM和PM。
答案 3 :(得分:0)
这是一个针对您想要做的简短程序。
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);
}
步骤:
Date
Collections.sort()
答案 4 :(得分:0)
DetailsVOTemp
模型有时间并添加set-get方法,我已经有一个列表,该列表是带有列表名称的列表。
从列表中获取时间和经纬度,然后将其存储在两个arraylist中,最后进行排序
List< DetailsVOTemp> firstlist = new ArrayList<>();
List<DetailsVOTemp> secondlisr = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
DetailsVOTemp mDetailsVOTemp = new DetailsVOTemp();
mDetailsVOTemp.setTime(list.get(i).getTime());
mDetailsVOTemp.setAdd(list.get(i).getLatLong());
mVoTemps.add(mDetailsVOTemp);
}
for (int i = 0; i < list.size(); i++) {
DetailsVOTemp mDetailsVOTemp = new DetailsVOTemp();
mDetailsVOTemp.setTime(list.get(i).getDropOffTime());
mDetailsVOTemp.setAdd(list.get(i).getDropLatLong());
mVoTemps1.add(mDetailsVOTemp);
}
mVoTemps.addAll(mVoTemps1);
Collections.sort(mVoTemps, new Comparator<DetailsVOTemp>() {
@Override
public int compare(DetailsVOTemp o1, DetailsVOTemp o2) {
return o1.getTime().compareTo(o2.getTime());
}
});
StringBuilder mBuilder = new StringBuilder();
StringBuilder mBuilder1 = new StringBuilder();
for (int i = 0; i < mVoTemps.size(); i++) {
mBuilder1.append(mVoTemps.get(i).getTime() +" :: ");
mBuilder.append(mVoTemps.get(i).getAdd() +" :: ");
}
Log.d("Time : ", mBuilder1.toString());
Log.d("Address : ", mBuilder.toString());