我正在为图像实现中值切割算法,并且我有一个包含所有像素的 ArrayList,但现在我需要根据一个颜色 channel 对其进行排序。这是我的 Pixel 类。
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;
}
}
颜色数组分别保存 [0]、[1] 和 [2] 中的 RGB 值,但是当我重写compareTo() 方法时,我不知道如何按特定颜色 channel 进行排序。我是否只需要实现自己的排序方法?
最佳答案
要按特定 channel 排序,您可以为每种颜色创建一个比较器。例如,要按红色值排序,您可以使用以下示例
public static class RedComparator implements Comparator<Pixel> {
@Override
public int compare(Pixel p1, Pixel p2) {
return Double.compare(p1.colors[0], p2.colors[0]);
}
}
然后您可以使用
Collections.sort(yourArrayList, new RedComparator())
按红色对 ArrayList 进行排序。
您可以为绿色和蓝色创建另外两个比较器
关于java - 对对象的 ArrayList 进行排序,但使用更改的排序键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33065314/