-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 メソッドがいくらか管理しやすくなります。

すなわち;

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 に答える