ArrayList对象排序混乱



我知道这是一个重复的问题。

但是,我被这件事卡住了。

public class Ooops<P, O> 
{
   private P po;
   private O pa;
   private int val;
   public Preference(P p, O o, int v) 
   {
        setPo(p);
        setPa(o);
        setValue(v);
   }
   //Getter and setter for Pa,Pa and val
}

我已经创建了一个此类的对象

   List<Ooops<String, String>> abc = new ArrayList<Oops<String, String>>();

类似

 Acf,PQR,8
 ABC,Pas,6
 AdC,PhR,3

成为

 AdC,PhR,3
 ABC,Pas,6
 Acf,PQR,8

我很困惑,如何根据对象中val的值对对象进行排序。

任何帮助都会很棒。

Ooops类需要实现Comparable。或者,您需要向排序方法传递一个自定义Comparator。

public class Ooops<P, O> implements Comparable<Ooops<P, O>> {
    // your code
    @Override
    public int compareTo(Ooops<P, O> other) {
       return other.val - this.val;
    }
}

稍后您可以简单地致电

Collections.sort(yourList);

您可以从Ooops实现Comparable并覆盖compareTo((。在compareTo()中,您可以有自己的逻辑来定义排序顺序。例如

 @Override
    public int compareTo(Ooops<P, O> other) {
       return (this.po.getPoCount()+this.pa.getPaCount()) - (other.po.getPoCount()+other.pa.getPaCount());
    }

注意,getPoCount()getPaCount()只是一些伪方法。

您可以通过multiplying获得descending order,通过-1获得上述返回值。

使用Comparator也会为您排序列表

最新更新