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

标签 java arraylist

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

相关文章:

java - 在java中使用正则表达式计算文件数量

java - 在 android studio 中从基于 Web 的应用程序打印?

java - 无法在服务器中进行简单的显示richfaces

java - 如何执行 2 个列表的合并?

Java iterate/foreach 包含 hashmap/map<Int, Int> 的 ArrayList

java - 带有迭代器的 ConcurrentModificationException

java - 创建具有可扩展键值的 map

java - 如何加载 'ParserModel' 以及将 "en-parser-chunking.bin"文件放置在 Web 应用程序中的何处?

java - ArrayList <E> 类中的 addAll() 方法不起作用

java - 如何将矩阵转换为 2D ArrayList Java