Tengo una Map
y quiero ordenar los valores por un Comparator
poniendo el resultado en una LinkedHashMap
.
Map<String, User> sorted = test.getUsers()
.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(SORT_BY_NAME))
.collect(LinkedHashMap::new, (map, entry) -> map.put(entry.getKey(), entry.getValue()),
LinkedHashMap::putAll);
test.setUsers(sorted);
Todas las obras, sin embargo, me pregunto si esto se puede simplificar.
En realidad creo un nuevo Map
y poner ese nuevo Map
en el setUsers()
. ¿Puedo cambiar la corriente directa sin necesidad de crear una nueva LinkedHashMap
?
Con Collections.sort(Comparator)
, la lista está ordenada directamente. Sin embargo, Collections.sort
no funciona con Mapas.
No se puede realizar en el lugar de clasificación en una colección que no admite la indexación de estilo de matriz, por lo que para los mapas que está fuera de la cuestión (excepto que utiliza algo así como una especie de selección en una LinkedHashMap
, pero eso sería una mala idea). La creación de un nuevo mapa es inevitable. Todavía se puede simplificar, sin embargo, por la siguiente respuesta de shmosel.