2017-08-19 1 views
-3

J'ai une liste que j'ai trié et je veux convertir le List en Color[] Une raison pour laquelle j'ai ces couleurs dans une liste est que je pourrais mettre en œuvre ma propre comparaison commander les couleurs dans la liste. Il contient uniquement des couleurs. Maintenant que je peux les trier, je veux transformer la liste en Color[]. Jusqu'ici j'ai essayé différentes manières de le convertir mais j'ai échoué. La raison pour laquelle j'utilise une liste est parce que je trie les couleurs en fonction des coordonnées qui correspondent à la couleur actuelle. Voici plus d'arrière-plan:Comment faire pour convertir l'objet [] en couleur [] Java

Voici mes tentatives:

SortColors s = new SortColors(); 

    s.x = roi.x; 
    s.y = roi.y; 
    s.color = colorToAdd; 

Voici sa classe de commande:

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. Le casting a échoué sur celui-ci:

Color [] sortedColors = (Color[]) colorsToSort.toArray(); //List to a Object Array 

En voici une autre:

(Ce fut m'a donné une exception ArrayStore)

Object [] sortedColors = colorsToSort.toArray(); //List to an Object Array 
Color[] sorted = Arrays.copyOf(sortedColors, sortedColors.length, Color[].class); 

J'ai aussi essayé cela, mais obtenir le ArrayStoredException:

Color [] sortedColors = colorsToSort.toArray(new Color[54]); //List to a Color Array 
+0

duplicable de [Comment faire pour convertir un tableau d'objets en tableau de chaînes en Java] (https://stackoverflow.com/questions/1018750/how-to-convert-object-array-to-string-array-in-java) – Li357

+0

Si vous regardez la réponse, cela ne fonctionne qu'avec une chaîne []. J'ai essayé cette réponse et ça ne fonctionnait pas. @AndrewLi – ProgrammingCuber

+1

"* La seule raison pour laquelle j'ai ces couleurs dans une liste est que j'ai pu mettre en place ma propre comparaison pour classer les couleurs dans la liste. *" Vous pouvez aussi trier des tableaux avec votre propre comparateur Classe java.util.Arrays Quoi qu'il en soit, vous pouvez retourner du tableau List de type spécifique avec 'list.toArray (new Color [0]);'. – Pshemo

Répondre

1

Vous avez dit

La seule raison pour laquelle j'ai ces couleurs dans une liste est que je pourrait implémenter ma propre comparaison

N'utilisez pas de liste. Utilisez un tableau dès le début et utiliser la méthode utilitaire Arrays.sort(T[] a, Comparator<? super T> c) pour les trier:

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

ou si Color implements Comparable<Color> avec votre calcul de comparaison, utilisez la méthode utilitaire Arrays.sort(Object[] a):

Arrays.sort(colors); 

Dans l'improbable événement que vous devez absolument utiliser une liste:

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

J'utilise ceci pour trier ma liste 'Collections.sort (colorsToSort);'. Comment ferais-je cela différemment pour travailler avec votre réponse? – ProgrammingCuber

+0

@ProgrammingCuber voir plus à ma réponse – Bohemian

+0

Je n'utiliserais pas une liste mais je devrais ajouter plus à ma question pour vous montrer pourquoi j'utilise une liste. – ProgrammingCuber