覆盖compareTo并使用两个字符串进行排序

roo*_*oot 3 java

让我们说我有一个专辑课.我如何编码compareTo方法,以便当我有一个Album对象的ArrayList并且我调用

Collections.sort()

它将按标题按照歌手按升序排序.

Public class Album implements Comparable{

private String title;
private String singer;
private double price;

.....

public int compareTo(){

// How to

}

}
Run Code Online (Sandbox Code Playgroud)

aio*_*obe 5

我会这样写的

public int compareTo(Album other) {
    int primary = title.compareTo(other.title);
    return primary != 0 ? primary
                        : singer.compareTo(other.singer);
}
Run Code Online (Sandbox Code Playgroud)

但就个人而言,我认为专辑是否具有"自然顺序"是有争议的.例如,如果您将来想要对评级或年份的专辑进行排序,请考虑一下.

如果我是你,我可能会Comparator为此创建一个:

class TitleSingerComparator implements Comparator<Album> {
    public int compare(Album a, Album b) {
        int primary = a.title.compareTo(b.title);
        return primary != 0 ? primary
                            : a.singer.compareTo(b.singer);
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用.对集合进行排序

Collections.sort(albums, new TitleSingerComparator());
Run Code Online (Sandbox Code Playgroud)