我有一个颜色。我想要做的是将数组从 RGB 颜色的最低值到 RGB 颜色的最高值进行排序。我尝试使用Arrays.sort()
但它不是Arrays.sort()
可以处理的可比性。我怎样才能做到这一点?
System.out.println("anchors unsorted: " + Arrays.toString(allAnchorColors));
Arrays.sort(allAnchorColors);
System.out.print("anchors sorted: " + Arrays.toString(allAnchorColors));
输出:
anchors unsorted: [java.awt.Color[r=255,g=186,b=34], java.awt.Color[r=255,g=14,b=20], java.awt.Color[r=2,g=255,b=168], java.awt.Color[r=242,g=231,b=255], java.awt.Color[r=255,g=26,b=28], java.awt.Color[r=0,g=65,b=255]]
这个问题不是一个容易直接回答的问题,因为Color
它至少由三个主要属性组成(不包括 alpha ;)),但间接地,您需要提供一个Comparator
可以根据您的要求对颜色进行排序的自定义,例如。
这基本上利用了getRGB
将值转换为打包int
值的方法,使比较更简单
Color[] colors = {Color.RED, Color.GREEN, Color.BLUE, Color.BLACK, Color.WHITE};
for (Color color: colors) {
System.out.println(color.getRGB() + "; " + color);
}
Arrays.sort(colors, new Comparator<Color>() {
@Override
public int compare(Color o1, Color o2) {
return o1.getRGB() - o2.getRGB();
}
});
System.out.println("After");
for (Color color: colors) {
System.out.println(color.getRGB() + "; " + color);
}
哪个打印出来...
-65536; java.awt.Color[r=255,g=0,b=0]
-16711936; java.awt.Color[r=0,g=255,b=0]
-16776961; java.awt.Color[r=0,g=0,b=255]
-16777216; java.awt.Color[r=0,g=0,b=0]
-1; java.awt.Color[r=255,g=255,b=255]
After
-16777216; java.awt.Color[r=0,g=0,b=0]
-16776961; java.awt.Color[r=0,g=0,b=255]
-16711936; java.awt.Color[r=0,g=255,b=0]
-65536; java.awt.Color[r=255,g=0,b=0]
-1; java.awt.Color[r=255,g=255,b=255]
这种“类型”满足您的要求,事实上,在此BLACK
之前WHITE
:P
但是,答案保持不变,您需要提供一个自定义Comparator
,在根据您的排序算法比较两个值时生成所需的结果
我正在看这个,但有点困惑,因为当我实现你在这里的东西时,我得到了一堆我以前没有的其他颜色
根据您提供给我的可用信息,排序算法不会添加任何新值...
Color[] allAnchorColors = {
new Color(255, 200, 63),
new Color(255, 8, 12),
new Color(0, 255, 148),
new Color(223, 214, 255),
new Color(255, 19, 19),
new Color(0, 76, 255),
};
System.out.println("anchors.length = " + allAnchorColors.length);
System.out.println("anchors unsorted: " + Arrays.toString(allAnchorColors));
Arrays.sort(allAnchorColors, new Comparator<Color>() {
@Override
public int compare(Color o1, Color o2) {
return o1.getRGB() - o2.getRGB();
}
});
System.out.println("anchors.length = " + allAnchorColors.length);
System.out.print("anchors sorted: " + Arrays.toString(allAnchorColors));
哪个输出...
anchors.length = 6
anchors unsorted: [java.awt.Color[r=255,g=200,b=63], java.awt.Color[r=255,g=8,b=12], java.awt.Color[r=0,g=255,b=148], java.awt.Color[r=223,g=214,b=255], java.awt.Color[r=255,g=19,b=19], java.awt.Color[r=0,g=76,b=255]]
anchors.length = 6
anchors sorted: [java.awt.Color[r=0,g=76,b=255], java.awt.Color[r=0,g=255,b=148], java.awt.Color[r=223,g=214,b=255], java.awt.Color[r=255,g=8,b=12], java.awt.Color[r=255,g=19,b=19], java.awt.Color[r=255,g=200,b=63]]BUILD SUCCESSFUL (total time: 4 seconds)
这意味着,你的代码中有一些你没有向我们展示导致问题的东西
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句