【发布时间】:2018-01-28 06:19:05
【问题描述】:
我有一个排序的列表,我想将 List 转换为 Color[]
我将这些颜色放在列表中的一个原因是,我可以实现自己的比较来对列表中的颜色进行排序。它只包含颜色。现在我可以对它们进行排序,我想将列表变成Color[]。到目前为止,我尝试了不同的转换方式,但都没有成功。我使用列表的原因是因为我根据与当前颜色对应的坐标对颜色进行排序。这里有更多背景:
这是我的尝试:
SortColors s = new SortColors();
s.x = roi.x;
s.y = roi.y;
s.color = colorToAdd;
这是它的排序类:
public class SortColors implements Comparable<SortColors> {
public int x, y;
public Color color;
@Override
public int compareTo(SortColors other) {
if (null==other) throw new NullPointerException();
// implement the logic, like:
// this will compare X, unless difference in Y is more than EG 10
return Math.abs(y - other.y) > 10 ? y - other.y : x - other.x;
}
@Override
public String toString(){
/* String result = "";
result = "x " + x + ", y " + y + "\n" + color.toString() + "\n";
System.out.println(result);
*/
return color.toString();
}
}
1. 铸造失败:
Color [] sortedColors = (Color[]) colorsToSort.toArray(); //List to a Object Array
这是另一个:
2(这给了我一个 ArrayStore 异常)
Object [] sortedColors = colorsToSort.toArray(); //List to an Object Array
Color[] sorted = Arrays.copyOf(sortedColors, sortedColors.length, Color[].class);
3 我也试过了,但得到了 ArrayStoredException:
Color [] sortedColors = colorsToSort.toArray(new Color[54]); //List to a Color Array
【问题讨论】:
-
如果您查看答案,它仅适用于字符串 []。我尝试了那个答案,但它不起作用。 @AndrewLi
-
"我将这些颜色放在列表中的唯一原因是我可以实现自己的比较来对列表中的颜色进行排序。" 您还可以使用通过
java.util.Arrays类中的sort方法创建您自己的比较器。无论如何,您可以使用list.toArray(new Color[0]);从特定类型的 List 数组返回。 -
ArrayStoreException documentation "表明已尝试将错误类型的对象存储到对象数组中" 所以您试图将不存在的东西放入数组中不属于那里。你确定你的列表只包含颜色吗?没有看到正确的minimal reproducible example,很难帮助你。
-
你为什么有
SortColors这个类?您需要一个实现Comparator<Color>的类,而不是实现<Comparable<Color>的类。或者使Color实现Comparable<Color>。
标签: java arrays type-conversion