Ordenar ArrayList of Array en Java

¿Cuál es la mejor manera de ordenar una ArrayList en Java?

Donde String [] es …

 String[] = new String[] { "abc", "abc", "abc", "abc", "abc", "abc", "abc" }; 

Ahora quiero ordenar todo el ArrayList por el 2º valor de String [] (en el índice 1). Necesito recorrer cada Cadena [] y luego su hijo en el índice 1.

¿Algunas ideas?

EDITADO


Tengo mas descripcion De hecho, recibo escuelas de algún archivo XML y cada nodo en XML tiene 7 atributos. Ahora estoy creando un ArrayList of String [] que contiene esos nodos escolares de XML y String [] el array en sí mismo tiene los atributos de un nodo particular.

Ahora, la forma en que quiero ordenarlo es que debe ordenar de acuerdo con State of school, que es el segundo atributo en XML y el índice 1 en String [] dentro de ArrayList.

Necesito recorrer todas y cada una de las escuelas primero (nodo en XML, String [] en Java) y luego tendré que filtrar el estado (atributo State en XML, String [1] en Java).

¿Está claro ahora?

Comience con Collections.sort, el que toma un comparador personalizado . También necesitará escribir un Comparador personalizado para esto.

Por ejemplo, suponiendo que desea confiar en el ordenamiento natural de cadenas como se define en su método compareTo:

 public static void main(String[] args) throws Exception { ArrayList listOfStringArrays = new ArrayList(); listOfStringArrays.add(new String[] {"x","y","z"}); listOfStringArrays.add(new String[] {"a","b","c"}); listOfStringArrays.add(new String[] {"m","n","o"}); Collections.sort(listOfStringArrays,new Comparator() { public int compare(String[] strings, String[] otherStrings) { return strings[1].compareTo(otherStrings[1]); } }); for (String[] sa : listOfStringArrays) { System.out.println(Arrays.toString(sa)); } /* prints out [a, b, c] [m, n, o] [x, y, z] */ } 

Usted crea un Comparator así:

 new Comparator() { public int compare(String[] first, String[] second) { return first[1].compareTo(second[1]); } } 

luego, pásalo a Collections.sort() .

Es posible que desee verificar si el segundo elemento está realmente presente en la matriz. También podría hacer una comparación personalizada si la comparación de cadenas estándar no es suficiente.

Usted escribe un Comparator que compara dos String[] con el niño correcto, y luego lo pasa a Collections.sort(List list, Comparator c) .

Según su edición: Your String [] debería ser un objeto School para contener sus atributos. Haga que el objeto de su escuela implemente Comparable y eso permitirá una fácil ordenación con Collections.sort ().

Esto es extremadamente fácil de hacer con Java 8. Simplemente escriba:

 list.sort(Comparator.comparing(a -> a[1])); 

Por ejemplo, el siguiente código:

 List list = Arrays.asList( new String[] { "abc", "abc", "abc", "abc", "abc", "abc", "abc" }, new String[] { "xyz", "xyz", "xyz", "xyz", "xyz", "xyz", "xyz" }, new String[] { "fgh", "fgh", "fgh", "fgh", "fgh", "fgh", "fgh" }); list.sort(Comparator.comparing(a -> a[1])); list.stream().map(Arrays::toString).forEach(System.out::println); 

Producirá el resultado deseado:

 [abc, abc, abc, abc, abc, abc, abc] [fgh, fgh, fgh, fgh, fgh, fgh, fgh] [xyz, xyz, xyz, xyz, xyz, xyz, xyz]