多维数组上的java比较器

时间:2011-12-16 19:16:55

标签: java sorting comparator

有没有更好的方法来编写这个比较器?我有一个等价的多维数组,其中列是Object。 99%的情况下,实际对象为StringBigDecimal。我在给定的列索引上排序“行”。

我想避免使用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");
        }
    }

3 个答案:

答案 0 :(得分:2)

由于StringBigDecimal都是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类成为应该使用的正确比较器的工厂。