我输入了多个字符串,我解析每个字符串以获取某些数据,然后相应地显示它们。关键是我需要在显示它们之前对它们进行排序。 澄清:
String s1 = "a1 5 2014-12-05";
String s2 = "a2 10 2014-12-06";
String s3 = "a3 5 2014-12-04":
在对每个字符串进行操作后,我需要先根据第二个参数对它们进行降序排序,然后根据日期达到平局时的日期排序。
输出应为:
a2, a1, a3
知道如何实现这一目标,或者我是否可以改变更有效的方式?!
答案 0 :(得分:2)
您可以解析数据并使用Collections#sort。您的班级可以使用Comparable
定义一些自然排序,如果您想要降序排序,那么只需将Comparator.reverseOrder()作为第二个arg传递给Collections#sort
,就像这样
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
public class DateSorter {
static class Entry implements Comparable<Entry> {
String id;
int num;
Date date;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
public Entry(String id, int num, String date) throws ParseException {
this.id = id;
this.num = num;
this.date = sdf.parse(date);
}
@Override
public int compareTo(Entry o) {
return date.compareTo(o.date);
}
@Override
public String toString() {
return id + '\'';
}
}
public static void main(String[] args) throws ParseException {
String s1 = "a1 5 2014-12-05";
String s2 = "a2 10 2014-12-06";
String s3 = "a3 5 2014-12-04";
String[] split = s1.split(" ");
List<Entry> entries = new ArrayList<>();
entries.add(new Entry(split[0], Integer.parseInt(split[1]), split[2]));
split = s2.split(" ");
entries.add(new Entry(split[0], Integer.parseInt(split[1]), split[2]));
split = s3.split(" ");
entries.add(new Entry(split[0], Integer.parseInt(split[1]), split[2]));
Collections.sort(entries, new Comparator<Entry>() {
@Override
public int compare(Entry o1, Entry o2) {
return o2.compareTo(o1);
}
});
System.out.println(entries);
}
}
输出
[a2', a1', a3']