【发布时间】:2014-02-26 19:45:18
【问题描述】:
如何按索引对事件进行排序?
我的项目的简单视图:
class Event{
int index;
}
class EventField{
Event[] field;
}
class Action{
EventField ev;
ev.sort(); // Sort event in field EventField by index
}
【问题讨论】:
如何按索引对事件进行排序?
我的项目的简单视图:
class Event{
int index;
}
class EventField{
Event[] field;
}
class Action{
EventField ev;
ev.sort(); // Sort event in field EventField by index
}
【问题讨论】:
将Arrays.sort() 与正在使用Comparator<Event> 的Comparator<Event> 一起使用
Arrays.sort(ev.field, new Comparator<Event>(){
@Override
public int compare(Event e1, Event e2) {
return Integer.compare(e1.index, e2.index)
}
});
【讨论】:
在 Java 中,您有两种定义顺序的方法,您可以创建 Comparator 来创建排序策略,或者定义实现 Comparable 的类的 natural-order
使用比较器的示例:
class Event{
private int index;
public static final Comparator<Event> INDEX_COMPARATOR = new MyComparator();
//TODO define getters and setter equals & hashCode cause it's strong recommended
static class MyComparator implements Comparator<MyClass>{
@Override
public int compare(Event o1, Event o2) {
return Integer.valueOf(o1.index).compareTo(o2.index);
}
}
}
然后在 EventField 中。
例子:
class EventField{
Event[] fields;
public void sort(){
Arrays.sort(fields,Event.INDEX_COMPARATOR );
}
}
阅读更多:Collections#sort(..)
如果您想定义类的自然排序,只需定义
public class Event implements Comparable<Event>{
private int index;
//define getter&setter & recommended equals & hashCode
@Override
public int compareTo(Event o) {
return Integer.valueOf(index).compareTo(o.index);
}
}
在 EventField 代码中:
Arrays.sort(fields); // where fields is Event[]
【讨论】:
你需要实现EventField中的方法
class EventField{
Event[] field;
public void sort(){ Arrays.sort(field, yourCustomComparatorInstance }
}
在Event 上使用自定义Comparator 进行排序
相关:
见
【讨论】:
return o1.getX() - o2.getX();,因为当您将接近Integer.MIN_VALUE 的数字与接近Integer.MAX_VALUE 的数字进行比较时,它可能会溢出。见this。
如果您在程序中自然会经常比较事件,您可以扩展Comparable 接口:
public class Event implements Comparable<Event> {
private int index;
public int getIndex() {
return index;
}
@Override
public int compareTo(Event o) {
return index == o.getIndex() ? 0 : (index > o.getIndex() ? 1 : -1);
}
}
然后您可以拨打Arrays.sort(ev.getField())。如果 'field' 中的对象总是要排序的,那么只要你添加一些东西,你就可以保持它的对象排序。
【讨论】: