大家好(如果我的英语很遗憾), 我必须在学校编写Android应用程序代码。 该项目涉及一个音乐播放器,我有一个音乐的arraylist,我希望能够按不同的标准(艺术家,标题和专辑)对它们进行排序。我已经完成了一些代码,但它只适用于标题。我让你下面的代码,我想根据按下的按钮修改typeTri,我在每个按钮(艺术家,标题和专辑)上有一个clicklistener。谢谢你的帮助
@Override
public int compareTo(Musique a){
String typeTri = "Artistes";
if (typeTri.equals("Artistes")){
if (a.getArtiste().compareTo(this.getArtiste())>0)
return -1;
if (a.getArtiste().compareTo(this.getArtiste())<0)
return 1;
if (a.getArtiste().equals(this.getArtiste()))
return 0;
}
if (typeTri.equals("Albums")){
if (a.getAlbum().compareTo(this.getAlbum())>0)
return -1;
if (a.getAlbum().compareTo(this.getAlbum())<0)
return 1;
if (a.getAlbum().equals(this.getAlbum()))
return 0;
}
if (typeTri.equals("Titres")){
if (a.getTitre().compareTo(this.getTitre())>0)
return -1;
if (a.getTitre().compareTo(this.getTitre())<0)
return 1;
if (a.getTitre().equals(this.getTitre()))
return 0;
}
return 0;
}
答案 0 :(得分:3)
在您的代码中查找,就像您正在Musique
实施Comparable<Musique>
一样。参考该类的Javadoc:
此接口对实现它的每个类的对象强加一个总排序。这种排序被称为类的自然顺序......
如果您想根据上下文按不同标准对事物进行排序,那么您不会按自然顺序对它们进行排序。因此,在这种情况下使用Comparable
是不合适的,而是定义外部Comparator
。
最简单的几个Comparator<Musique>
个实例,每个当前typeTri
值都有一个:
enum MusiqueComparator implements Comparator<Musique> {
ARTISTE {
@Override public int compare(Musique a, Musique b) {
return b.getArtiste().compareTo(a.getArtiste());
}
},
ALBUM {
@Override public int compare(Musique a, Musique b) {
return b.getAlbum().compareTo(a.getAlbum());
}
},
TITRE {
@Override public int compare(Musique a, Musique b) {
return b.getTitre().compareTo(a.getTitre());
}
}
}
现在,当您点击按钮进行排序时,例如艺术家,将MusiqueComparator.ARTISTE
传递给Collections.sort
,按照该标准对您的列表进行排序。
答案 1 :(得分:1)
在onClickListener中试试这个
if(musiqueList!=null) {
Collections.sort(musiqueList, new Comparator<Musique>() {
@Override
public int compare(Musique item1, Musique item2) {
if(typeTri.equals("Titres"){
//compare your items by Titres
} else if(typeTri.equals("Albums")
//compare your items by Albums
else //compare your items by Artistes
}
});
}
答案 2 :(得分:1)
您可以使用以下功能轻松地对任何Collection(List&lt;&gt;是一个Collection)进行排序:
Collections.sort(arrayListToSort, new MyComparator());
你需要提供自己的逻辑来比较llike this:
class MyComparator implements Comparator<YourType>
{
@Override
public int compare(YourType lhs, YourType rhs)
{
//your logic for comparing these two, you need to return int, 0 if they're equal, negative value if lhs is greater, positive if it's smaller
}
}