2017-01-24 4 views
1

Supposons que je souhaite avoir une fonction dans laquelle je vais trier la première colonne d'un tableau en utilisant Comparateur. Je veux passer dans cette fonction tableau de dimensions multiples, cependant, chaque fois que le nombre de ces dimensions peut être différent. Je pensais à utiliser la fonction de type générique, mais cette approche ne semble pas fonctionner. Comment faire? Je pensais à écrire un code comme celui-ci, mais cela ne compile même pas, et je ne sais pas comment faire autrement. Je dois ajouter que je ne considère que les tableaux de chaînes.Tri de la première colonne d'un tableau de nombre inconnu de dimensions en Java

public <T> T sortArray(T array){ 

     Arrays.sort(array, new Comparator<T>() { 
      @Override 
      public int compare(T lhs, T rhs) { 
       final String str1 = lhs[0]; 
       final String str2 = rhs[0]; 
       return str1.compareTo(str2); 
      } 
     }); 

     return array; 
    } 
+0

Une longueur de java est toujours connue. Vous pouvez obtenir la longueur d'un tableau avec l'attribut 'longueur'. Par conséquent, vous connaissez toujours les dimensions;) –

+0

Quelle est la première * colonne * dans un tableau à 3 ou 4 dimensions? Je pense que le concept d'une colonne ne fait que depuis en 2 dimensions. Si vous affichez votre code actuel, les choses peuvent devenir plus claires. –

+0

@ThomasD. La taille des deuxième, troisième, quatrième dimensions est facultative dans les tableaux multidimensionnels. – CKing

Répondre

0

Vous devrez peut-être changer si vous voulez travailler pour les médicaments génériques, mais le code suivant fonctionnera pour les objets en général (mais changer la coulée dans la méthode comparer à jeter à tout type que vous passez) .

public Object[][] sortArray(Object[][] array){ 

     Object[] columnElements = new Object[array.length]; 
     for (int i = 0; i < array.length; i++) { 
      columnElements[i] = array[i][0]; 
     } 

     Arrays.sort(columnElements, new Comparator<Object>() { 
      @Override 
      public int compare(Object o1, Object o2) { 
       return ((String) o1).compareTo((String) o2); 
      } 
     }); 


     for (int i = 0; i < array.length; i++) { 
      array[i][0] = columnElements[i]; 
     } 

     return array; 
    }