Java 使用更改的排序键对对象的ArrayList进行排序

Java 使用更改的排序键对对象的ArrayList进行排序,java,sorting,arraylist,Java,Sorting,Arraylist,我正在为一幅图像实施中值切割算法,我有一个包含所有像素的ArrayList,但现在我需要根据一个颜色通道对其进行排序。这是我的像素类 public class Pixel implements Comparable<Pixel>{ public int x,y; public double[] colors; public Pixel(int x, int y, double[] colors ){ this.x=x; thi

我正在为一幅图像实施中值切割算法,我有一个包含所有像素的ArrayList,但现在我需要根据一个颜色通道对其进行排序。这是我的像素类

public class Pixel implements Comparable<Pixel>{
    public int x,y;
    public double[] colors;

    public Pixel(int x, int y, double[] colors ){
        this.x=x;
        this.y=y;
        this.colors=colors;
    }

    @Override
    public int compareTo(Pixel compareNode) {
        //not sure what to do here
        return 0;
    }
}
公共类像素{
公共整数x,y;
公共双[]色;
公共像素(整数x、整数y、双[]色){
这个.x=x;
这个。y=y;
这个。颜色=颜色;
}
@凌驾
公共整数比较器(像素比较器节点){
//我不知道该怎么办
返回0;
}
}

颜色数组分别保存[0]、[1]和[2]中的RGB值,但当我重写compareTo()方法时,我不知道如何按特定颜色通道进行排序。我需要实现自己的排序方法吗?

要按特定通道排序,可以为每种颜色创建一个比较器。例如,要按红色值排序,可以使用以下示例

public static class RedComparator implements Comparator<Pixel> {
    @Override
    public int compare(Pixel p1, Pixel p2) {
        return Double.compare(p1.colors[0], p2.colors[0]);
    }
}
公共静态类RedComparator实现Comparator{
@凌驾
公共整数比较(像素p1、像素p2){
返回Double.compare(p1.colors[0],p2.colors[0]);
}
}
然后您可以使用
Collections.sort(yourArrayList,new RedComparator())
按红色对ArrayList排序


您可以为绿色和蓝色创建另外两个比较器

您总是希望以相同的方式对像素进行排序,还是希望能够选择按哪个颜色通道进行排序?如果您想要后者,您可能想要创建一些
比较器
,而不是实现
可比
。什么是“我需要基于一个颜色通道对其进行排序”呢?你是否需要对所有像素进行排序,首先根据红色,然后根据绿色,然后根据蓝色?我需要根据最宽的颜色通道进行排序。假设红色的值从2-250,绿色的值从45-180,蓝色的值从100-200,我想根据红色通道对整个列表进行排序。然后最好为每个通道分别创建一些比较器。参考@triadiktyo的答案。在问题中,
colors
是一个
double[]
,尽管我同意它应该是一个
int[]
。事实上我也发现了这一点。我将在代码中修复它,但建议将颜色更改为int[],我被告知RGB值可以是小数,所以我只使用了双精度数据类型。顺便谢谢你的帮助。