Java 使用更改的排序键对对象的ArrayList进行排序
我正在为一幅图像实施中值切割算法,我有一个包含所有像素的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
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值可以是小数,所以我只使用了双精度数据类型。顺便谢谢你的帮助。