【问题标题】:How to convert Object[] to Color[] Java如何将 Object[] 转换为 Color[] Java
【发布时间】: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&lt;Color&gt; 的类,而不是实现&lt;Comparable&lt;Color&gt; 的类。或者使Color实现Comparable&lt;Color&gt;

标签: java arrays type-conversion


【解决方案1】:

你说

我在列表中包含这些颜色的唯一原因是我可以实现自己的比较

不要使用列表。从一开始就使用数组并使用Arrays.sort(T[] a, Comparator&lt;? super T&gt; c) 实用方法对它们进行排序:

Color[] colors; // given an array of colors 
Arrays.sort(colors, (x, y) -> Math.abs(y - other.y) > 10 ? y - other.y : x - other.x);

或者如果Color implements Comparable&lt;Color&gt; 与您的比较计算,使用Arrays.sort(Object[] a) 实用方法:

Arrays.sort(colors);

万一您绝对必须使用列表:

Color[] colorArray = Arrays.stream(colorList).map(Color.class::cast).toArray(Color[]::new);

【讨论】:

  • 我用它来对我的列表进行排序Collections.sort(colorsToSort);。我将如何以不同的方式处理您的答案?
  • @ProgrammingCuber 查看我的答案的补充
  • 我不会使用列表,但我必须在我的问题中添加更多内容以向您展示我为什么使用列表。
  • @ProgrammingCuber 或者仅仅因为排序能力而删除您正在使用列表的信息,因为数组也通过Arrays.sort 方法拥有它。如果您有更多理由使用列表,那么“我在列表中有这些颜色的唯一原因是我可以实现自己的比较”根本不正确,因此不应该出现在您的问题中.
  • @ProgrammingCuber 然后为您的问题添加更多内容
猜你喜欢
  • 1970-01-01
  • 2016-10-19
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
  • 2021-08-22
  • 2011-04-22
相关资源
最近更新 更多