【问题标题】:ArrayList for String sorting [duplicate]用于字符串排序的 ArrayList [重复]
【发布时间】:2013-04-09 18:47:20
【问题描述】:

用于字符串排序的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的值对对象进行排序。

任何帮助都会很棒。

【问题讨论】:

  • 几分钟前你没问过类似的问题吗?
  • @Smit 完全一样。一小时前也有类似的。两者都有公认的答案。
  • 谢谢!!!这对我帮助很大 !!!好吧,对于字符串它不是,因为它不起作用,因为我已经覆盖了该方法,因此,我又问了一遍。

标签: java arraylist


【解决方案1】:

您可以使用带有自定义 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.
  }

});

【讨论】:

    猜你喜欢
    • 2011-08-14
    • 2017-02-23
    • 2011-08-14
    • 2014-02-09
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2015-07-14
    • 2012-04-16
    相关资源
    最近更新 更多