Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays_Sorting - Fatal编程技术网

java中按类字段对数组排序

java中按类字段对数组排序,java,arrays,sorting,Java,Arrays,Sorting,有人能帮我解决java中的以下问题吗。我有一个简单的类,定义如下: public class Expr { public long total_apparitions; public String expression=new String(); public Expr(long total,String expr){ this.total_apparitions=total; this.expression=expr; } public void inc

有人能帮我解决java中的以下问题吗。我有一个简单的类,定义如下:

public class Expr {
  public long total_apparitions;
  public String expression=new String();

  public Expr(long total,String expr){
    this.total_apparitions=total;
    this.expression=expr;
  }

  public void increment(long aparitions){
    total_apparitions+=aparitions;
  }
}
我想使用Arrays.sort内置函数,通过total_appreations字段对Expr对象数组进行排序。如何为Arrays.sort函数指定比较因子?非常感谢。

让Expr实现java.lang.com

编辑-应该提供其他人已经提供的示例。下面是使用泛型的完整示例

public class Expr implements Comparable<Expr>
{

    public long total_apparitions;
    public String expression = new String();

    public Expr(long total, String expr)
    {
        this.total_apparitions = total;
        this.expression = expr;

    }

    public void increment(long aparitions)
    {
        total_apparitions += aparitions;
    }

    public int compareTo(Expr o)
    {
        if (total_apparitions > o.total_apparitions)
        {
            return 1;
        }
        else if (total_apparitions < o.total_apparitions)
        {
            return -1;
        }
        else
        {
            return 0;
        }
    }
}

正如@Jason Braucht所说,实现类似的功能:

public class Expr implements Comparable {
  ...
  public int compareTo(Object o) {
    if(this.total_apparitions > ((Expr) o).total_apparitions)
      return 1;
    else if(this.total_apparitions < ((Expr) o).total_apparitions)
      return -1;
    return 0;
  }
}

作为实现Comparable的替代方法,您可以将Comparator实例传递给Arrays.sort方法。这样做的好处是,它允许您对这种类型的对象数组有不同的排序概念,比如您以后可能希望按名称排序,在这种情况下,您只需要使用不同的比较器实现

例如:

public class ByApparationsComparator implements Comparator<Expr> {
  public int compare(Expr first, Expr second) {
    if (first.total_apparitions > second.total_apparitions) {
      return 1;
    } else if (first.total_apparitions < second.total_apparitions) {
      return -1;
    } else {
      return 0;
    }
  }
}

但这让他的电话号码看起来很拥挤。实现Comparable使所有内容都更易于阅读,并允许他在需要时轻松调用sort。这取决于您是否希望在以后的某个阶段按其他内容进行排序。如果只有一个自然排序顺序,那么实现Compariable就是一条路。
Arrays.sort(exprArray, new ByApparationsComparator());