Pedidos HashMap por el tamaño del conjunto de valores

montyynis:

Me gustaría pedir una HashMap:

Map<Integer, Set<Integer>> unsorted

por el tamaño del conjunto de valores. He tratado de hacerlo de la siguiente manera:

        Map<Integer, Set<Integer>> sorted = unsorted.entrySet().stream()
            .sorted(comparingInt(e->e.getValue().size()))
            .collect(toMap(
                    Map.Entry::getKey,
                    Map.Entry::getValue,
                    LinkedHashMap::new
            ));

pero tiene un error

"Método no estático no puede hacer referencia a partir de un contexto estático"

. Soy nuevo en Java 8 arroyos y estoy perdiendo claramente algo trivial - ¿qué es?

Ousmane D .:

Respuesta corta: Te estás perdiendo la función de fusión:

.collect(toMap(Map.Entry::getKey,Map.Entry::getValue, (l, r) -> l, LinkedHashMap::new));

es decir, (l, r) -> lpor encima de.

Respuesta larga:

Usted está queriendo utilizar la toMapsobrecarga que tiene un "MapFactory" como el doc lo llama, en esencia se trata de un proveedor que proporciona un nuevo mapa vacío en la que se insertarán los resultados.

Ahora mira cómo se define la sobrecarga:

toMap​(Function<? super T,? extends K> keyMapper,
      Function<? super T,? extends U> valueMapper,
      BinaryOperator<U> mergeFunction,
      Supplier<M> mapFactory)

como se puede ver una mergeFunctionse requiere con el fin de proporcionar una "MapFactory" de lo contrario el compilador pensará que está intentando utilizar esta sobrecarga:

toMap​(Function<? super T,? extends K> keyMapper,
      Function<? super T,? extends U> valueMapper,
      BinaryOperator<U> mergeFunction)

por lo tanto, se produce el error anteriormente mencionado.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=184960&siteId=1
Recomendado
Clasificación