Comparator<ColorSample> comparator = new Comparator<ColorSample>() {
@Override
public int compare(ColorSample cs1, ColorSample cs2) {
double s1 = cs1.s;
double v1 = cs1.v;
double h1 = cs1.h;
double s2 = cs2.s;
double v2 = cs2.v;
double h2 = cs2.h;
//返回正数,零,负数分别代表大于 等于 小于
return (int)ColorSample.distHSV(h1, s1, v1, hsv[0], hsv[1], hsv[2]) -
(int)ColorSample.distHSV(h2, s2, v2, hsv[0], hsv[1], hsv[2]);
}
@Override
public int compare(ColorSample cs1, ColorSample cs2) {
double s1 = cs1.s;
double v1 = cs1.v;
double h1 = cs1.h;
double s2 = cs2.s;
double v2 = cs2.v;
double h2 = cs2.h;
//返回正数,零,负数分别代表大于 等于 小于
return (int)ColorSample.distHSV(h1, s1, v1, hsv[0], hsv[1], hsv[2]) -
(int)ColorSample.distHSV(h2, s2, v2, hsv[0], hsv[1], hsv[2]);
}
};
/**
* 计算HSV颜色空间中两个颜色的色差值
* */
public static double distHSV(double h1, double s1,double v1,double h2,double s2,double v2){
return Math.sqrt((h1-h2) * (h1-h2) + (s1-s2) * (s1 * s2) + (v1 - v2) * (v1 - v2));
}
Collections.sort(sampleList,comparator);
这里我们使用了一个匿名内部类 去实现Comparator接口,根据当前List中的颜色的hsv值 分别去与指定颜色的hsv颜色值相减 再将两者的结果集 相减 指定排序规则 再使用Collections.sort方法即可