对数组列表中对象的双精度值进行排序

2022-09-01 11:12:39

我正在尝试按其分数属性的值对我的自定义类染色体进行排序,该值是双精度。这些染色体存储在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;
    }
}

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


答案 1

要使用比较器

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

如果您计划以这种方式对多个进行排序,我建议实现Compable接口(在这种情况下,您可以简单地调用,而无需指定显式)。ListChromosomeCollections.sort(myList)Comparator


答案 2

使用Java SE8,您可以使用lambda表达式,如下所示:

list.sort((o1, o2) -> Double.compare(o2.doubleField, o1.doubleField));

推荐