2011-08-28 12 views
1

可能重复:
Sorting Songs in JavaCollection.sort /后退/ reverOrder

我有哪些存储标题,艺术家和时间 我有我所有的代码写出来的歌一个ArrayList和一切。我只想更多地了解Collection.sort和Collection.reverse和Collection.reverseOrder。我有一个包含所有歌曲和所有内容的文件。 我想按照时间降序排列歌曲。

当我尝试这个时,我要么得到一个错误,要么它没有正确排序。任何人都可以建议如何我 不能使用Collection.sort和使用比较

Comparator<Song> comparator = Collections.reverseOrder(); 
Collections.reverse(listOfSongs); 

我的比较方法如下:

public int compare(Song mySong1,Song mySong2){ 
     if (mySong1.getLength() > mySong2.getLength()){ 
      return -1; 
     } 
     if(mySong1.getLength() < mySong2.getLength()){ 
      return 1; 
     } 
     if(mySong1.getLength() == mySong2.getLength()) 
     { 
      if(mySong1.getTitle().compareTo(mySong2.getTitle()) > 0){ 
       return -1; 
      } 
      if(mySong1.getTitle().compareTo(mySong2.getTitle()) < 0){ 
       return 1; 
      } 
      else { 
       if(mySong1.getComposer().compareTo(mySong2.getComposer()) >0){ 
        return -1; 
       } 
       if(mySong1.getComposer().compareTo(mySong2.getComposer()) <0) { 
        return 1; 
       } 
      } 
     } 
     return 0; 
    } 
+0

什么类型的对象存储在ArrayList中? – adarshr

+9

男人,你有没有做另一个帐户?这个问题在过去的24小时里出现了5次。 –

+0

它们是ArrayList中的歌曲对象 – Pachun

回答

7

Collections.reverse不排序。它只是颠倒了列表元素的顺序。所以如果列表包含T, F, Z,它将包含Z, F, T

你的代码snipper初始化一个比较器,但没有做任何事情。而且这个比较器只能工作,如the javadoc所述,如果集合中的元素实现了接口Comparable

您应该使Song类实现Comparable接口(看看它的javadoc知道这个接口必须做的),或者你必须使用特定的Comparator实现。无论选择哪种解决方案,您都必须实施一些代码来告诉Collections.sort这些歌曲是如何与彼此进行比较的。在另一首歌曲的标题出现在另一首歌曲的标题之前时,是否是一首歌曲?或者当它的持续时间比另一个短时呢?

请参阅Sorting an ArrayList of Contacts based on name?

+0

党的摇滚国歌和LMFAO和327747 上周五晚与凯蒂·佩里和370907 今晚,今晚与热CHELLE李博和355536 如何去爱与律韦恩&279222 抽到了前场任意球和福斯特人民和355968 超级低音与本站Minaj和223744 我想去和布兰妮斯皮尔斯和267875 给我的一切&Pitbull&304190 Rolling In The Deep&Adele&315421 Good Life&OneRepublic&237007 我们的工作是从中提取标题和艺术家以及时间。我正在使用分隔符来获取标题,艺术家和时间,并且我将它存储在标题为[] Artist []和Time []的字符串数组中,在宋类实现 – Pachun

+1

之后将时间转换为int Comparable Pachun

+1

如果歌曲具有可比性,请使用“收藏集”。排序(列表)以对列表进行排序。使用Collection.sort(Collections.reverseOrder())以降序对列表进行排序。如果你阅读javadoc,这很明显。 –