在Java中按时间对ArrayList进行排序

时间:2016-02-27 16:05:38

标签: java android arraylist collections

我有List<String>,其中包含从上午8:00到下午4:00的时间列表。

当我在输出中显示它时,它显示未排序,当我使用Collections.sort(myList);时,它会从下午1:00到8:00进行排序。

如何从早上8点到下午4点对列表进行排序?

5 个答案:

答案 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());