studio - ¿Cómo ordeno un conjunto a una lista en Java?
sort comparator java (9)
@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());
En Java, tengo un Set
, y quiero convertirlo en una List
ordenada. ¿Existe algún método en el paquete java.util.Collections
que haga esto por mí?
Así es cómo puedes hacerlo con Streams de Java 8:
mySet.stream().sorted().collect(Collectors.toList());
o con un comparador personalizado:
mySet.stream().sorted(myComparator).collect(Collectors.toList());
Conjunto ordenado:
return new TreeSet(setIWantSorted);
o:
return new ArrayList(new TreeSet(setIWantSorted));
La respuesta proporcionada por OP no es la mejor. Es ineficiente, ya que crea una nueva List
y una nueva matriz innecesaria. Además, genera advertencias "sin marcar" debido a los problemas de seguridad tipo alrededor de las matrices genéricas.
En su lugar, usa 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 hacer eso. Utilizar esta:
@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);
}
Puede convertir un conjunto en ArrayList
, donde puede ordenar ArrayList
usando Collections.sort(List)
.
Aquí está el código:
keySet = (Set) map.keySet();
ArrayList list = new ArrayList(keySet);
Collections.sort(list);
Siempre es seguro usar el Comparador o la interfaz Comparable para proporcionar la implementación de clasificación (si el objeto no es una cadena o clases de Contenedor para tipos de datos primitivos). Como ejemplo para una implementación de comparador para clasificar a los empleados según 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 ());
El comparador es útil cuando necesita tener un algoritmo de clasificación diferente en el mismo objeto (nombre de emp, salario emp, etc.). La clasificación en modo simple se puede implementar utilizando una interfaz Comparable en el objeto requerido.
List myList = new ArrayList(collection);
Collections.sort(myList);
... debería hacer el truco sin embargo. Agregue sabor con genéricos cuando corresponda.
TreeSet sortedset = new TreeSet();
sortedset.addAll(originalset);
list.addAll(sortedset);
donde originalset = conjunto desordenado y list = la lista que se devolverá