es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hacer que Collectors.groupingBy() devuelva un LinkedHashMap ordenado?

Tengo una lista:

{Gato, Gato, Gato, Perro, Perro, Rata}

Quiero devolver un Map ordenado, ya sea ascendente o descendente a mi elección, donde las claves sean los nombres de los animales y los valores sean su frecuencia de aparición.

Por ejemplo:

{
Rata: 1
Perro: 2
Gato: 3
}

Al usar

LinkedHashMap<String, Long> map =
lista
.stream ()
.collect (Collectors.groupingBy (Function.identity (), LinkedHashMap :: new, Collectors.counting ()));

Puedo tener un LinkedHashMap, pero no está ordenado.

Sé que puedo ordenar el Map después, ¿pero hay alguna manera de hacerlo en un solo stream?

¡Gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, se puede ordenar el LinkedHashMap en un solo flujo. Puede utilizar el método Collectors.toMap () para crear un LinkedHashMap con el ordenamiento deseado. La sintaxis para esto es:

    LinkedHashMap <String, Long > map =
        lista
        .stream ()
        .collect(Collectors.toMap (Function.identity (),
                                 Contadores.counting (),
                                 (oldValue, newValue) -> oldValue,
                                 LinkedHashMap :: new));
    

    La parte (oldValue, newValue) -> oldValue se utiliza para manejar claves duplicadas y la parte LinkedHashMap :: new se utiliza para crear el LinkedHashMap con el ordenamiento deseado.

Comments are closed.