Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Collection.sort/reverse/reverse顺序_Java_Algorithm_Sorting_Collections - Fatal编程技术网

Java Collection.sort/reverse/reverse顺序

Java Collection.sort/reverse/reverse顺序,java,algorithm,sorting,collections,Java,Algorithm,Sorting,Collections,我有一个存储标题、艺术家和时间的歌曲列表 我把所有的代码都写出来了。我只是想更多地了解Collection.sort和Collection.reverse和Collection.reverseOrder。我有一个包含所有歌曲和所有内容的文件。 我想按照时间的降序对歌曲进行排序 当我尝试这个方法时,我要么得到一个错误,要么排序不正确。有人能建议我怎么做吗 无法使用Collection.sort并使用比较器 Comparator<Song> comparator = Collection

我有一个存储标题、艺术家和时间的歌曲列表 我把所有的代码都写出来了。我只是想更多地了解Collection.sort和Collection.reverse和Collection.reverseOrder。我有一个包含所有歌曲和所有内容的文件。 我想按照时间的降序对歌曲进行排序

当我尝试这个方法时,我要么得到一个错误,要么排序不正确。有人能建议我怎么做吗 无法使用Collection.sort并使用比较器

Comparator<Song> comparator = Collections.reverseOrder();
Collections.reverse(listOfSongs);
Comparator-Comparator=Collections.reverseOrder();
收藏。反面(歌曲列表);
我的比较方法如下:

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; 
    }
public int比较(宋美松1、宋美松2){
if(mySong1.getLength()>mySong2.getLength()){
返回-1;
}
if(mySong1.getLength()0){
返回-1;
}
if(mySong1.getTitle().compareTo(mySong2.getTitle())<0){
返回1;
}
否则{
如果(mySong1.getComposer().compareTo(mySong2.getComposer())>0){
返回-1;
}

if(mySong1.getComposer().compareTo(mySong2.getComposer())
集合。reverse
不排序。它只是颠倒列表元素的顺序。因此,如果列表包含
t,F,Z
,它将包含
Z,F,t

你的代码狙击手初始化了一个比较器,但不使用它。这个比较器只有在集合的元素实现了
Comparable
接口的情况下才能工作

您应该让
Song
类实现
Comparable
接口(查看其javadoc了解此接口必须做什么),或者必须使用特定的
比较器
实现。无论选择的解决方案是什么,都必须实现一些代码来告诉
集合。排序
歌曲之间的比较情况。当一首歌曲的标题在另一首歌曲的标题之前时,是一首歌曲在另一首歌曲之前吗?或者是当它的持续时间短于另一首歌曲时恩


请参见

你的ArrayList中存储了什么类型的对象?伙计,你有没有做其他说明?这个问题在过去24小时内出现了5次。ArrayList中有歌曲对象ArrayList中有歌曲对象。我用过这个类Song implements Comparator Rock Anthem&Lmfao&327747上周五晚&Katy Perry&370907 Tonight、 《今夜》&热辣的Chelle Rae&355536《如何去爱》&Lil Wayne&279222《激励与培育人民》&355968《超级低音》&Nicki Minaj&223744《我要去》&布兰妮·斯皮尔斯&267875《给我一切》&Pitbull&304190《滚滚深渊》&Adele&315421《美好生活》&OneRepublic&237007我们的工作是从中提取标题和艺术家以及时间。我正在使用用于获取标题、艺术家和时间的分隔符,我将其存储在一个字符串数组中,该数组具有标题[]艺术家[]和时间[],在Song类实现comparable后,时间将转换为int。如果歌曲具有可比性,请使用Collections.sort(list)对列表进行排序。使用Collection.sort(Collections.reverseOrder())按降序对列表进行排序。如果您阅读javadoc,这一点很明显。