Collection.sort /反向/ reverOrder

Pac*_*hun 2 java sorting algorithm collections

我有一个歌曲的Arraylist存储标题,艺术家和时间我写了我的所有代码和一切.我只是想了解更多关于Collection.sort和Collection.reverse以及Collection.reverseOrder的信息.我有一个包含所有歌曲和所有内容的文件.我想根据时间按降序排序歌曲.

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

Comparator<Song> comparator = Collections.reverseOrder();
Collections.reverse(listOfSongs);
Run Code Online (Sandbox Code Playgroud)

我的比较方法如下:

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; 
    }
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 9

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

您的代码片段初始化比较器,但不对其执行任何操作.并且这个比较器只能像javadoc所说的那样工作,如果集合的元素实现了Comparable接口.

您应该让Song类实现Comparable接口(查看其javadoc以了解此接口必须执行的操作),或者您必须使用特定的Comparator实现.无论选择何种解决方案,您都必须实现一些代码来Collections.sort说明歌曲如何相互比较.当它的标题出现在另一首歌的标题之前时,是否还有另一首歌?或者是它的持续时间比另一个短?

请参阅根据名称对联系人的ArrayList进行排序?