-4

用于字符串排序的 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>>();

就像是 ,

 Xcf,PQR,8
 DBC,Pas,6
 LdC,PhR,3

变成

 DBC,Pas,6
 LdC,PhR,3
 Xcf,PQR,8

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

任何帮助都会很棒。

4

1 回答 1

0

您可以使用带有自定义 Comparator 的 Collections.sort 方法对列表进行排序,将 Comparable 接口添加到 Oooops 也会使生活更轻松。

public class Ooops<P, O> implements Comparable<Ooops<P,O>> {

  private P po;
  private O pa;

  @Override
  public int compareTo(Ooops<P, O> o) {
    return (po.toString()+pa.toString()).compareTo(o.po.toString()+o.pa.toString());   //Some common way to compare the two.
  }
}

然后可以使用 Collections.sort 对列表进行排序。强制 P 和 O 扩展 Comparable 将使 compateTo 方法更易于管理。

IE;

public class Ooops<P extends Comparable<P>, O extends Comparable<O>> implements Comparable<Ooops<P,O>> {

  private P po;
  private O pa;

  @Override
  public int compareTo(Ooops<P, O> o) {
    if (po.compareTo(o.po) == 0)
      return pa.compareTo(o.pa);
    else
      return po.compareTo(o.po);
  }
}

改变 Ooops 的替代方法是创建一个自定义比较器;

ArrayList<Ooops<String, String>> abc = new ArrayList<Ooops<String, String>>();
Collections.sort(abc, new Comparator<Ooops<String, String>> (){

  @Override
  public int compare(Ooops<String, String> o1, Ooops<String, String> o2) {
    return 0; //Compare the two.
  }

});
于 2013-04-09T19:10:05.120 回答