在arrayList中对对象的double值进行排序

Mel*_*991 20 java double arraylist

我正在尝试按照得分属性的值来对我的自定义类染色体进行排序.这些染色体存储在ArrayList中.我知道我必须使用比较器,但我在最后一小时在线阅读了很多不同的意见,我完全感到困惑.

附上我的代码,如果有人能指出我正确的方向,我将不胜感激.

public class Chromosome
{

    public Gene[] genes;
    public double score;

    public Chromosome(int l)
    {
        genes = new Gene[l]; 
    }

    public int getLength()
    {
        return genes.length;
    }

    public void printChromo()
    {
        for(int i=0;i<this.genes.length;i++)
        {
            System.out.println(""+this.genes[i].teacher+","+
                this.genes[i].lecture+","+
                this.genes[i].room+","+
                this.genes[i].time+"");
        }   
    }

    public void setScore(double score)
    {
        this.score=score;
    }

    public double getScore()
    {
        return this.score;
    }
}
Run Code Online (Sandbox Code Playgroud)

不知道这有什么不同,但得分只能是0.0到1.0之间的两倍

ars*_*jii 64

使用Comparator:

Collections.sort(myList, new Comparator<Chromosome>() {
    @Override
    public int compare(Chromosome c1, Chromosome c2) {
        return Double.compare(c1.getScore(), c2.getScore());
    }
});
Run Code Online (Sandbox Code Playgroud)

如果您计划List以这种方式对大量s 进行排序,我建议Chromosome实现Comparable接口(在这种情况下,您可以简单地调用Collections.sort(myList),而无需指定显式Comparator).

  • 或者只是c2.compareTo(c1)而不是c1.compareTo(c2). (2认同)

iva*_*kov 10

使用Java SE8,您可以像这样使用 lambda 表达式:

list.sort((o1, o2) -> Double.compare(o2.doubleField, o1.doubleField));
Run Code Online (Sandbox Code Playgroud)