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