我有一个 Item 类,它有两个属性 - id 和 timestamp。有一个自定义比较器类可以根据时间戳对 itemList 进行排序。
有没有一种方法可以使用比较器类,以便我可以指定按时间戳排序或按 ID 排序?
项目类别:
public class Item {
private Integer id;
private Date timestamp;
}
比较器:
public class ItemComparator implements Comparator<Item>{
@Override
public int compare(Item mdi1, Item mdi2) {
return mdi1.getTimestamp().compareTo(mdi2.getTimestamp());
}
}
排序代码:
Collections.sort(itemList, new ItemComparator());
我也可以使用相同的比较器按 Id 对列表进行排序吗?
最佳答案
经过一些修改,是的。
添加一个带有枚举参数的构造函数来定义要使用的字段:
public class ItemComparator implements Comparator<Item>{
public enum Field {
ID, TIMESTAMP;
}
private Field field;
public ItemComparator(Field field) {
this.field = field;
}
然后在比较方法中,switch
选择的字段:
@Override
public int compare(Item mdi1, Item mdi2) {
int comparison = 0;
switch(field) {
case TIMESTAMP:
comparison = mdi1.getTimestamp().compareTo(mdi2.getTimestamp());
case ID:
comparison = mdi1.getID() - mdi2.getID();
}
return comparison;
}
关于具有不同排序选项的 Java 自定义比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19688247/