我创建了一个“Time”类,其中包含一些变量,例如:“intyear,month,days”。 现在,我将数据添加到 ArrayList,如下所示:
ArrayList<Time> list = new ArrayList<Time>();
list.add(new Time(2014,15,3));
list.add(new Time(2013,1,5));
list.add(new Time(2011,15,3));
list.add(new Time(2014,12,4));
现在为了按年和月过滤数据,我创建了一个 for 循环,例如:
for(i = 0; i<=list.size();i++)
{
if(list.get(i).getYear == 2014 && list.get(i).getMonth == 12)
{
templist.add(new Time(list.get(i).getYear(),list.get(i).getMonth(),list.get(i).getDay()));
}
}
然后它被过滤..但我认为这是一个非常糟糕的做法,因为我的 Time.class 在日期旁边有很多变量,我想将所有变量一起传递,我知道如何使用“Collection.sort” ”和“比较器”,但我确信有更好的方法来做到这一点..比如 addAll 或其他东西..你觉得怎么样?
最佳答案
使用Collections.sort
是最好的方法。
以下是如何使用自定义Comparator
来做到这一点:
Collections.sort(list, new Comparator<Time>() {
@Override
public int compare(final Time t1, final Time t2) {
if (t1.getYear() != t2.getYear())
return t1.getYear() - t2.getYear();
if (t1.getMonth() != t2.getMonth())
return t1.getMonth() - t2.getMonth();
return t1.getDay() - t2.getDay();
}
});
for (final Time time : list) {
System.out.printf("%s %s %s\n", time.getYear(), time.getDay(), time.getMonth());
}
<小时/>
以下是如何实现 Comparable
接口(interface):
首先,你的Time
类:
public class Time implements Comparable<Time> {
int year;
int day;
int month;
//...
@Override
public int compareTo(Time t) {
if (this.getYear() != t.getYear())
return this.getYear() - t.getYear();
if (this.getMonth() != t.getMonth())
return this.getMonth() - t.getMonth();
return this.getDay() - t.getDay();
}
}
然后,您可以使用以下方法对列表进行排序:
Collections.sort(list);
for (final Time time : list) {
System.out.printf("%s %s %s\n", time.getYear(), time.getDay(), time.getMonth());
}
<小时/>
或者,一旦 Time
实现 Comparable
,您可以使用 TreeSet
而不是 ArrayList
,以便在将 Time
添加到集合中时对其进行排序:
TreeSet<Time> set = new TreeSet<Time>();
set.add(new Time(2014, 15, 3));
set.add(new Time(2013, 1, 5));
set.add(new Time(2011, 15, 3));
set.add(new Time(2014, 12, 4));
for (final Time time : set) {
System.out.printf("%s %s %s\n", time.getYear(), time.getDay(), time.getMonth());
}
关于java - 如何获取新的ArrayList数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25639677/