¿Cómo ordenar el mapa hash en función del número de claves para un valor usando flatmap java8?
Este es un seguimiento deCómo obtener el recuento de claves para valores en un mapa hash usando lambda. tengo unHashMap
y quiero encontrar el número de claves para cada valor
Map<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>() {{
put(0, Arrays.asList(1, 2));
put(1, Arrays.asList(2, 0, 3));
put(2, Arrays.asList(4,0,1));
put(3, Arrays.asList(4,1, 5));
put(4, Arrays.asList(5,2,3));
put(5, Arrays.asList(4,3));
}};
De acuerdo con la publicación anterior, probé el mapeo plano:
Map<Object, Long> ex =
map.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.groupingBy(v -> v, Collectors.counting()));
System.out.println(ex);
La salida es
{0=2, 1=3, 2=3, 3=3, 4=3, 5=2}.
Esto significa que 0 tiene dos teclas, 1 tiene tres teclas y así sucesivamente. Ahora quiero ordenar las claves y los valores en orden descendente según el recuento de claves. Intenté algo como esto:
Map<Object, Long> ex =
map.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.groupingBy(v -> v, Collectors.counting()));
.entrySet()
.stream()
.sorted(Map.Entry.<String, Long>comparingByValue(reverseOrder()).thenComparing(Map.Entry.comparingByKey()))
.collect(LinkedHashMap::new, (m,e) -> m.put(e.getKey(), e.getValue()), Map::putAll);
Quiero el siguiente resultado:
1=[2, 3, 0], 2=[1,4,0], 3=[1, 4, 5], 4=[2, 3, 5], 0=[1, 2], 5=[3, 4]
Las claves y los valores deben organizarse en orden descendente de acuerdo con este recuento de claves{0=2, 1=3, 2=3, 3=3, 4=3, 5=2}
: 1, 2, 3, 4 tiene tres teclas, 0 y 5 tienen dos teclas.
Por ejemplo:1=[2, 3, 0]
: 1 tiene tres teclas, por lo que aparece primero con[2, 3, 0]
: 2 y 3 tienen tres teclas y 0 tiene solo dos teclas.