有没有更好的方法来编写这个比较器?我有一个等价的多维数组,其中列是Object
。 99%的情况下,实际对象为String
和BigDecimal
。我在给定的列索引上排序“行”。
我想避免使用instanceof。
protected static class MyComparator implements Comparator<DataRow> {
private int idx;
public MyComparator(int idx) {
this.idx = idx;
}
@Override
public int compare(DataRow r1, DataRow r2) {
Object o1 = r1.getColumns()[idx];
Object o2 = r2.getColumns()[idx];
if (o1 instanceof String){
return ((String)o1).compareTo((String)o2);
}else if (o1 instanceof BigDecimal){
return ((BigDecimal)o1).compareTo((BigDecimal)o2);
}else{
throw new UnsupportedOperationException("comparison cannot be performed");
}
}
答案 0 :(得分:2)
由于String
和BigDecimal
都是Comparable
s:
return ((Comparable)o1).compareTo(o2);
答案 1 :(得分:1)
我认为既然您只依赖于Comparable类型,您可以将其重写为:
public int compare(DataRow r1, DataRow r2) {
Comparable o1 = (Comparable) r1.getColumns()[idx];
Comparable o2 = (Comparable) r2.getColumns()[idx];
return o1.compareTo(o2);
}
如果您仔细填充表格,则不应面对UnsupportedOperationException情况。
答案 2 :(得分:0)
如果列类型不具有可比性,我会实现单独的比较器,并使Column类成为应该使用的正确比较器的工厂。