En Java, tengo un Set
, y quiero convertirlo en un List
ordenado. ¿Hay algún método en el paquete java.util.Collections
que haga esto por mí?¿Cómo puedo ordenar un conjunto en una lista en Java?
Respuesta
La respuesta provided by the OP no es la mejor. Es ineficiente, ya que crea una nueva matriz List
y innecesaria. Además, genera advertencias "sin marcar" debido a los problemas de seguridad tipo alrededor de las matrices genéricas.
En su lugar, usar algo como esto:
public static
<T extends Comparable<? super T>> List<T> asSortedList(Collection<T> c) {
List<T> list = new ArrayList<T>(c);
java.util.Collections.sort(list);
return list;
}
Aquí hay un ejemplo de uso:
Map<Integer, String> map = new HashMap<Integer, String>();
/* Add entries to the map. */
...
/* Now get a sorted list of the *values* in the map. */
Collection<String> unsorted = map.values();
List<String> sorted = Util.asSortedList(unsorted);
No hay un solo método para hacerlo. Utilice:
@SuppressWarnings("unchecked")
public static <T extends Comparable> List<T> asSortedList(Collection<T> collection) {
T[] array = collection.toArray(
(T[])new Comparable[collection.size()]);
Arrays.sort(array);
return Arrays.asList(array);
}
Existe también una función Collections.sort, pero creo que hace lo mismo.+1 de todos modos. – CookieOfFortune
Collections.sort toma una lista como parámetro. –
conjunto ordenado:
return new TreeSet(setIWantSorted);
o:
return new ArrayList(new TreeSet(setIWantSorted));
Esto fue lo primero que pensé, pero el autor de la pregunta quería una lista –
@Alex: este enfoque aún se puede usar; return new ArrayList (new TreeSet (setIWantSorted)) – Jonik
De hecho, utilicé esta solución, pero no lo aconsejaría. Como la documentación en TreeSet establece (ver http://download.oracle.com/javase/1.4.2/docs/api/java/util/TreeSet.html), efectivamente usa el método compareTo() en lugar de los iguales () Método: si tiene dos objetos en el conjunto que tienen el mismo resultado igual(), se verán como duplicados y, como tales, no se agregarán al conjunto de árboles. Tener cuidado. – fwielstra
List myList = new ArrayList(collection);
Collections.sort(myList);
... debe hacer el truco sin embargo. Agregue sabor con genéricos cuando corresponda.
Tenía un fragmento útil que quería donar a la comunidad. Cuando busqué la información, no pude encontrarla. Intentaba facilitar el trabajo de la próxima persona. http://stackoverflow.com/questions/18557/how-does-stackoverflow-work-the-unofficial-faq#119658 –
Sí, claro, pero el enlace que proporcionó en realidad está hablando de _real_ preguntas (es decir, las de que no tienen la respuesta, luego encuéntrala). Su pregunta aquí fue solo para dar la respuesta ... De hecho, pude ingresar cientos de preguntas y responderme a mí mismo; ¡ese no es el punto! – Seb
@Seb: No estoy de acuerdo. No veo nada malo en esta pregunta. Obviamente no era una pregunta extremadamente simple, ¡y ahora él conoce una manera mejor que antes! –
Puede convertir un conjunto en un ArrayList
, donde se puede ordenar la ArrayList
usando Collections.sort(List)
.
Aquí está el código:
keySet = (Set) map.keySet();
ArrayList list = new ArrayList(keySet);
Collections.sort(list);
¿En qué se diferencia esto de la respuesta aceptada? – Tim
siempre seguro de usar ya sea Comparador o interfaz Comparable para proporcionar la clasificación aplicación (si el objeto no es una cadena o clases de envoltura para tipos de datos primitivos). A modo de ejemplo para una aplicación comparador para ordenar los empleados basándose en el nombre
List<Employees> empList = new LinkedList<Employees>(EmpSet);
class EmployeeComparator implements Comparator<Employee> {
public int compare(Employee e1, Employee e2) {
return e1.getName().compareTo(e2.getName());
}
}
Collections.sort(empList , new EmployeeComparator());
Comparador es útil cuando se necesita tener una diferencia algoritmo de ordenación en el mismo objeto (Diga el nombre emp, salario emp, etc). La clasificación en modo simple se puede implementar utilizando una interfaz Comparable en el objeto requerido.
TreeSet sortedset = new TreeSet();
sortedset.addAll(originalset);
list.addAll(sortedset);
donde originalset = conjunto no seleccionada y lista = la lista para ser devueltos
Así es como se puede hacer con Java 8 Streams:
mySet.stream().sorted().collect(Collectors.toList());
o con un comparador personalizado:
mySet.stream().sorted(myComparator).collect(Collectors.toList());
@Jeremy Stein Yo quería implementar el mismo código. También quería ordenar el conjunto a la lista, entonces, en lugar de utilizar Set I convertí los valores establecidos en List y ordeno esa lista por una de las variables. Este código me ayudó,
set.stream().sorted(Comparator.comparing(ModelClassName::sortingVariableName)).collect(Collectors.toList());
- 1. Ordenar una lista vinculada en Java
- 2. Hibernate: ordenar un conjunto
- 3. ¿Cómo puedo ordenar las claves de un mapa en Java?
- 4. Ordenar en una lista
- 5. ¿Cómo puedo ordenar un conjunto de mapas clojure?
- 6. ¿Cómo puedo ordenar enum alfabéticamente en Java?
- 7. ¿Cómo puedo ordenar una lista vinculada en sql?
- 8. manera más rápida para ordenar una lista en Java
- 9. Java: ordenar una lista no modificable
- 10. Cómo ordenar una lista en C#
- 11. ¿Cómo ordenar una lista de arrays de objetos java?
- 12. Cómo ordenar alfa conjunto numérico en pitón
- 13. ¿Cómo ordenar una lista numéricamente?
- 14. ¿Cómo puedo ordenar una lista basada en las selecciones de un usuario en ASP.NET MVC?
- 15. ¿Cómo ordenar una lista según otra lista?
- 16. ¿Cómo puedo ordenar parcialmente una lista de Python?
- 17. Java: ordenar una ArrayList en su lugar
- 18. Cómo ordenar una lista de estructuras por un elemento de la estructura en Java
- 19. ¿Cómo ordenar una lista de colores en una dimensión?
- 20. ordenar una lista de tuplas en Python
- 21. ¿Cómo puedo ordenar una lista de coordenadas para un rectángulo en sentido antihorario?
- 22. ¿Cómo puedo ordenar una lista de varias maneras diferentes en un JSP?
- 23. Ordenar una lista vinculada en C
- 24. ¿Cómo puedo obtener solo la primera fila en un conjunto de resultados DESPUÉS de ordenar?
- 25. ¿Cómo puedo lanzar una lista usando genéricos en Java?
- 26. ¿Cómo puedo ordenar un NSDictionary?
- 27. pitón: cómo ordenar una lista compleja en dos claves diferentes
- 28. Cómo ordenar una lista con objetos dinámicos
- 29. ¿Puedo consultar una lista? Java
- 30. Inserción de colección Java: Conjunto vs. Lista
Gracias! Que SuppressWarnings siempre me molestaba. –
@erickson donde tengo que encontrar la clase Util, me refiero a qué paquete. Por favor, ayúdenme. – sunleo
@sunleo La clase 'Util' es la que contiene el método' asSortedList() 'que escribí. En otras palabras, escribes la clase 'Util' y colocas ese código en ella. – erickson