[英]Java custom comparator with different sort options
我有一个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;
}
我也可以使用相同的比较器按Id排序列表吗?
那么你可以有一个构造函数参数来说明你想要排序的属性 - 但我个人会为此创建一个不同的类。 您可以根据需要使用实现Comparator<Item>
任意数量的类...
您可以使用Bean Comparator 。 然后你可以对你班上的任何财产进行排序。 您只需指定要用于获取要排序的属性的方法名称。 例如:
BeanComparator byId = new BeanComparator(Item.class, "getId");
Collections.sort(items, byId);
该比较器可用于任何类别。
使用两个独立的比较器。 选择要在排序调用中使用的那个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.