我被赋予了创建具有所有常用功能的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()方法但是你可以看到它只按artistName对它进行排序!我希望用户可以选择如何对音轨进行排序等等。我想也许我可以在MP3_Track中有一个数据库,它可以标记要实现的类型,然后在compareTo方法中返回所需的结果。这个解决方案看起来有点麻烦,我想到的另一种可能是实现自定义界面!!!
对于光滑的解决方法的任何建议都非常感谢???
非常感谢我的进步,伟大的网站BTW ..
答案 0 :(得分:4)
您需要查看Collections.sort()方法。您可以传递Comparator接口的实现,它将使用它来进行排序。
有关示例,请参阅http://www.vogella.com/articles/JavaCollections/article.html#collectionssort
答案 1 :(得分: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) {
...
}
答案 2 :(得分:-2)
我认为你可以为每种排序设置不同的MP3_Track子类,但这似乎比让某些数据成员检查以决定使用哪种排序更麻烦,并且使运行时排序方法之间的切换变得复杂。
老实说,我没有看到使用数据成员来决定要做哪种排序的问题。