与CompareTo不同

时间:2015-05-17 23:40:58

标签: java comparison comparator compareto

我每次都试图做一个不同的比较,具体取决于具体情况。 例如: 我有一个名为Line的类,在类中有字符串名称,int id和int扩展名 我希望能够通过名称OR id OR extension来比较2个不同的Line对象。

1 个答案:

答案 0 :(得分:3)

如果你有两种不同的比较方案,你可能需要两个不同的Comparator(或者可以配置一个,例如,通过如何比较的构造函数参数)

public class LineNameComparator implements Comparator<Line> {
    @Override
    public int compare (Line a, Line b) {
        return a.getName().compareTo(b.getName());
    }
}

public class LineIdComparator implements Comparator<Line> {
    @Override
    public int compare (Line a, Line b) {
        return a.getIf().compareTo(b.getId());
    }
}

public class LineExtensionComparator implements Comparator<Line> {
    @Override
    public int compare (Line a, Line b) {
        return a.getExtension().compareTo(b.getExtension());
    }
}

...然后根据您的需要使用它:

List<Line> list = ...

// Sort by name:
Collections.sort(list, new LineNameComparator());


// Sort by ID:
Collections.sort(list, new LineIdComparator());


// Sort by extension:
Collections.sort(list, new LineExtensionComparator());