如何根据不同的标准对数组列表进行排序?

时间:2016-03-14 20:51:20

标签: java sorting arraylist

大家好(如果我的英语很遗憾), 我必须在学校编写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;
    }

3 个答案:

答案 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
 }

}