Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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 如何根据不同的标准对数组列表进行排序?_Java_Sorting_Arraylist - Fatal编程技术网

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

Java 如何根据不同的标准对数组列表进行排序?,java,sorting,arraylist,Java,Sorting,Arraylist,大家好(如果我的英语不好,对不起), 我必须在学校编写一个Android应用程序。 该项目涉及到一个音乐播放器,我得到了一个音乐阵列列表,我希望能够按照不同的标准(艺术家、标题和专辑)对它们进行排序。我已经做了一些代码,但它只适用于标题。下面是我的代码,我想根据按下的按钮修改typeTri,每个按钮上都有一个clicklistener(艺术家、标题和专辑)。谢谢你的帮助 @Override public int compareTo(Musique a){ String t

大家好(如果我的英语不好,对不起), 我必须在学校编写一个Android应用程序。 该项目涉及到一个音乐播放器,我得到了一个音乐阵列列表,我希望能够按照不同的标准(艺术家、标题和专辑)对它们进行排序。我已经做了一些代码,但它只适用于标题。下面是我的代码,我想根据按下的按钮修改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;
    }
@覆盖
公共国际比较(音乐a){
String typeTri=“艺人”;
if(类型三等于(“艺人”)){
如果(a.getArtiste().compareTo(this.getArtiste())>0)
返回-1;
if(a.getArtiste().compareTo(this.getArtiste())0)
返回-1;
如果(a.getAlbum().compareTo(this.getAlbum())0)
返回-1;

如果在onclick侦听器中(a.getitre().compareTo)(this.getitre()),请尝试以下操作

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
                }
            });
        }
if(musiqueList!=null){
Collections.sort(musiqueList,newcomparator(){
@凌驾
公共整数比较(音乐项目1、音乐项目2){
如果(类型三等于(“滴定度”){
//按标题比较你的物品
}else if(typeTri.equals(“相册”)
//按相册比较您的项目
else//请艺术家比较您的物品
}
});
}

在你的onclick监听器中试试这个

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
                }
            });
        }
if(musiqueList!=null){
Collections.sort(musiqueList,newcomparator(){
@凌驾
公共整数比较(音乐项目1、音乐项目2){
如果(类型三等于(“滴定度”){
//按标题比较你的物品
}else if(typeTri.equals(“相册”)
//按相册比较您的项目
else//请艺术家比较您的物品
}
});
}

在您的代码中,看起来您正在制作
Musique
实现
可比较的
。参考该类的Javadoc:

此接口对实现它的每个类的对象施加总排序。此排序称为类的自然排序

如果您想根据上下文按不同的标准对事物进行排序,那么您不是按自然顺序对它们进行排序。因此,在这种情况下,不适合使用
Comparable
,而是定义外部
比较器

最简单的方法是拥有多个
比较器
实例,每个实例对应一个当前
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());
    }
  }
}
enum MusiqueComparator实现Comparator{
艺人{
@覆盖公共整数比较(Musique a、Musique b){
返回b.getArtiste().compareTo(a.getArtiste());
}
},
相册{
@覆盖公共整数比较(Musique a、Musique b){
返回b.getAlbum().compareTo(a.getAlbum());
}
},
乳头{
@覆盖公共整数比较(Musique a、Musique b){
返回b.getitre().compareTo(a.getitre());
}
}
}

现在,当您单击按钮进行排序时,例如艺术家,将
MusiqueComparator.Artister
传递到,以按照该标准对列表进行排序。

在您的代码中,看起来您正在制作
Musique
实现
可比性
。参考该类的Javadoc:

此接口对实现它的每个类的对象施加总排序。此排序称为类的自然排序

如果您想根据上下文按不同的标准对事物进行排序,那么您不是按自然顺序对它们进行排序。因此,在这种情况下,不适合使用
Comparable
,而是定义外部
比较器

最简单的方法是拥有多个
比较器
实例,每个实例对应一个当前
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());
    }
  }
}
enum MusiqueComparator实现Comparator{
艺人{
@覆盖公共整数比较(Musique a、Musique b){
返回b.getArtiste().compareTo(a.getArtiste());
}
},
相册{
@覆盖公共整数比较(Musique a、Musique b){
返回b.getAlbum().compareTo(a.getAlbum());
}
},
乳头{
@覆盖公共整数比较(Musique a、Musique b){
返回b.getitre().compareTo(a.getitre());
}
}
}

现在,当您单击按钮进行排序时,例如艺术家,请将
MusiqueComparator.ARTISTE
传递到以该标准对列表进行排序。

您可以使用以下功能轻松对任何集合(列表即集合)进行排序:

Collections.sort(arrayListToSort, new MyComparator());
您需要提供自己的逻辑来进行比较,如下所示:

class MyComparator implements Comparator<YourType>

}

您可以使用以下功能轻松对任何集合(列表是集合)进行排序:

Collections.sort(arrayListToSort, new MyComparator());
您需要提供自己的逻辑来进行比较,如下所示:

class MyComparator implements Comparator<YourType>

}

您可以调用,例如
返回a.getArtiste().compareTo(this.getArtiste())
;不需要这三种情况。如果你想颠倒顺序,只需交换
a
这个
。是的,但我想能够根据屏幕上按下的按钮按艺术家、相册和标题进行排序。在这里,我在任何情况下都会按艺术家进行排序,我想知道如何根据c中按下的按钮修改typeTri在这种情况下,您需要删除
equals
的情况,因为如果
比较器的实现是一致的(对于
字符串
,则是一致的)如果它不大于或小于,则等于。因此,它将始终从一个条件分支返回。此外,如果不在执行过程中更改其值,则不能通过多个属性进行比较。
typeTri
。因此,我认为使用compareTo不是一个解决方案。你知道如何使用其他方法实现吗?你可以