2012-02-16 61 views
3

可以說我有一個Album類。我如何編寫compareTo方法,這樣,當我專輯對象的ArrayList和我打電話重寫compareTo並使用兩個字符串排序

Collections.sort()

將它們按標題遵循升序排序歌手。

Public class Album implements Comparable{ 

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

..... 

public int compareTo(){ 

// How to 

} 

} 

回答

3
public class Album implements Comparable<Album> { 
    ... 
    public int compareTo(Album other) { 
    int cmp = title.compareTo(other.title); 
    if (cmp == 0) { 
     cmp = singer.compareTo(other.singer); 
    } 
    return cmp; 
    } 
} 
5

我會寫它像

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

個人不過,我會說這是值得商榷的專輯無論是否有「自然排序」。例如,考慮你將來是否想按照評分或年份對相冊進行排序。

如果我是你,我可能會爲此創建一個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); 
    } 
} 

和排序使用

Collections.sort(albums, new TitleSingerComparator()); 
+0

你arguement似乎是合理的集合。然而,爲了這個問題,路易斯的答案就是我真正想要的。爲您投票。 – root 2012-02-16 08:56:36

相關問題