3

我的任务是创建具有所有常用功能的 MP3 目录。我有一个 MP3_Track、MP3_UserInterface 和 Main 类。

public class MP3_Track implements Comparable<MP3_Track>{

private int trackNo;
private String artistName;
private String albumName;
private String trackLength;

MP3_Track(int no, String artist, String album, String length){
    this.trackNo = no;
    this.artistName = artist;
    this.albumName = album;
    this.trackLength = length;

// setters & getters

@Override
public String toString(){
        return (" Track Number : " + trackNo + "\n Artist Name  : " + artistName + "\n Album Name   : " + albumName +"\n Track Length : " + trackLength);
}

@Override
public int compareTo(MP3_Track aTrack){
    int result;
    try{
        result = artistName.compareTo(aTrack.artistName);
    }
    catch(UnsupportedOperationException e){
        throw new UnsupportedOperationException("Not supported here.");
    }
    return result;
  }
}

我的主要课程包含:

static void deleteTrack()
static MP3_Track addTrack()
static void moveTrack()
static void exploreTracks()...etc

主要调用相关方法,具体取决于用户在控制台中输入的内容。

如:Collections.sort(myTracks); myTracks 是 MP3_Tracks 的集合,目前 mt MP3_Track 覆盖了 compareTo() 方法,但正如您所见,它仅按艺术家名称排序!!!我希望用户可以选择如何对曲目进行排序等。我想也许我可以在 MP3_Track 中有一个数据mamber,它可以标记要实现的排序类型,然后在 compareTo 方法中使用一些 if 来返回所需的结果。这个解决方案似乎有些麻烦,我想到的另一种可能是实现自定义接口!

任何关于巧妙解决方法的建议都非常感谢???

非常感谢我提前,伟大的网站顺便说一句..

4

3 回答 3

4

您需要查看 Collections.sort() 方法。您可以传入 Comparator 接口的实现,它将使用它进行排序。

有关示例,请参见http://www.vogella.com/articles/JavaCollections/article.html#collectionssort

于 2013-11-01T21:17:44.277 回答
3

您可以Collections.sort根据用户输入传递自定义比较器

例如 -

if ( "artistName".equals(sortType) ) {
    Collections.sort(myList, new Comparator<MP3_Track>() {
        @Override
        public int compare(MP3_Track track1, MP3_Track track2) {
          // use artist name to compare
        }
    });
 }
 else if ("albumName".equals(sortType) {
   ...
 }
于 2013-11-01T21:18:08.567 回答
-2

我想您可以为每种排序设置不同的 MP3_Track 子类,但这似乎比检查一些数据成员来决定使用哪种排序更麻烦,并且在运行时使排序方法之间的切换变得复杂。

老实说,我看不出使用数据成员来决定要执行哪种类型的问题。

于 2013-11-01T21:16:19.073 回答