una tamaño programa por para palabras ordenar nombres lista enlazada como caracteres cadena arreglo alfabeticamente java sorting collections order alphabetized

tamaño - Ordenar alfabéticamente una colección de Java basada en el valor ''toString'' de sus elementos miembros



ordenar un arraylist por string (9)

Recomiendo encarecidamente que solo use toString para fines de depuración ... sin embargo ... para ampliar lo que escribió Yuval A más arriba ...

public class X implements Comparator { public int compare(final Foo a, final Foo b) { return (a.toString().compareTo(b.toString())); } }

Sin embargo, realmente debería tener Foo implementar Comarable o escribir un Compartor adecuado que no haga uso de toString.

Supongamos que tengo una clase Java definida por el usuario llamada Foo, como:

public class Foo { private String aField; @Override public String toString() { return aField; } }

y una Colección como:

List<Foo> aList;

Lo que quiero hacer es ordenar la lista en orden alfabético según el valor ''.toString ()'' devuelto por cada miembro.

Intenté usar el método Collections.sort (), pero el resultado no fue el que estaba intentando. ¿Qué debo hacer para lograr esto?


Si desea que la colección permanezca ordenada, en lugar de ordenarla en puntos específicos, puede colocarla en un TreeSet con un comparador definido. De lo contrario, utilizaría el método Collections.sort ya mencionado por Yuval.


Utilice la sort(List list, Comparator c) API sort(List list, Comparator c) que especifica un comparador, e impleméntelo como desee.

Alternativamente, si no necesita específicamente una Lista, use un SortedSet , lo mismo ocurre con el comparador.


public class Foo implements Comparable<Foo> { private String aField; public Foo(String s) { aField=s; } public String getAField() { return aField; } public int compareTo(Foo other) { return getAField().compareTo(other.getAField()); } @Override public String toString() { return getAField(); } }

y entonces

Collections.sort (lista);


Collections.sort(fooList, new Comparator<Foo>() { public int compare(Foo f1, Foo f2) { return f1.toString().compareTo(f2.toString()); } });

Suponiendo que toString nunca devuelve nulo y que no hay elementos nulos en la lista.


lambdaj le permite ordenar, filtrar y en general manipular colecciones sin escribir bucles u oscurecer las clases internas. Por ejemplo, la clasificación que estaba preguntando se puede lograr de la siguiente manera:

sort(foos, on(Foo.class).toString());

Si te interesa, échale un vistazo a:

http://code.google.com/p/lambdaj/


google-collections lo hace realmente fácil con el pedido :

Collections.sort(list, Ordering.usingToString());

¿Merece la pena traer una biblioteca de terceros para usar algo que podría escribir trivialmente usando un Comparador (como otros han proporcionado)? No, pero google-collections es tan genial que querrás tenerlo de todos modos por muchas otras razones.

En el frente de clasificación, también puedes hacer cosas como invertir:

Ordering.usingToString().reverse();

o romper lazos:

Ordering.usingToString().compound(someOtherComparator);

o lidiar con nulos:

Ordering.usingToString().nullsFirst();

etc., pero hay muchas cosas más (no solo relacionadas con la clasificación, por supuesto) que conducen a un código realmente expresivo. ¡Echale un vistazo!


Haría algo muy similar a Pierre:

public class Foo implements Comparable<Foo> { private String aField; @Override public String toString() { return aField; } public int compareTo(Foo o) { return this.toString().compareTo(o.toString()); } }

Entonces, como Pierre, utilizaría Collections.sort(list) como sugiere Pierre.


La versión de Java 8:

list.sort(Comparator.comparing(Object::toString));

O transmisión:

List<Foo> sortedList = unsortedList .stream() .sorted(Comparator.comparing(Object::toString))) .collect(Collectors.toList());