gpt4 book ai didi

java - 如何获取新的ArrayList数据?

转载 作者:行者123 更新时间:2023-12-01 12:35:29 25 4
gpt4 key购买 nike

我创建了一个“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/

25 4 0