我在按日期排序Calendar
时遇到了一些麻烦,我不确定我的代码有什么问题。
首先:我有一个类(名为Note
),其中包含多个变量和方法,其中一个变量是Calendar
。
然后我有一个名为ArrayList<aboveclass>
的{{1}}包含上述类的多个实例。我试图按每个类实例的日期对list
进行排序。
这是我的代码:
list
但是没有任何东西被排序,for(int i = 0; i<list.size(); i++){
for(int x=0; x < list.size() - x - 1; x++){
if(list.get(x).date.after(list.get(x+1).date)){
Note temp = list.get(x);
list.set(x, list.get(x+1));
list.set(x+1, temp);
System.out.println(i + " and " + x + " Switched");
}
}
}
永远不会发生。我也尝试将System.out.println
与.after
切换为无差异。
我有什么遗失的吗?
由于
答案 0 :(得分:1)
如果您不需要按冒号排序对列表进行排序,则可以使用java.util.Collection.sort()
。
您的代码将变为:
Collections.sort(list);
然而,您需要制作您的课程(如果我是对的Note
),请实施Comparable或创建comparator。
Here你可以找到一些例子。
答案 1 :(得分:1)
尝试为Comparator
使用ArrayList
。
ArrayList<Note> x = new ArrayList<>();
x.sort(new Comparator<Note>() {
@Override
public int compare(Note o1, Note o2) {
return o1.date.after(o2.date);
}
});
这些内容应该有效,我不确定你如何访问date
变量。
编辑:以上版本仅适用于Java 8。
将此用于Java 7及更早版本。
ArrayList<Entity> x = new ArrayList<>();
Collections.sort(x, new Comparator<Entity>() {
@Override
public int compare(Entity o1, Entity o2) {
return o1.date.after(o2.date);
}
});
答案 2 :(得分:0)
首先,解决您的问题,在您的算法中,您在第二个循环中遇到问题
for(int x=0; x < list.size() - x - 1; x++)
你在做什么,你正在检查x<list.size()- x-1
你应该做的是检查x<list.size()- i-1
每个itteratation外循环减少内循环的数量
第二件事,就像其他人建议的那样,并使用Collections.sort()
对您的列表进行排序,没有必要重新发明轮子。或者,您可以使用PriorityQueue
代替列表,这样您的数据将始终排序