Como classificar o mapa de hash com base no número de chaves de um valor usando o flatmap java8?
Este é um acompanhamento deComo obter a contagem de chaves para valores em um mapa de hash usando lambda. eu tenho umHashMap
e eu quero encontrar o número de chaves 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 acordo com o post acima, tentei o mapeamento plano:
Map<Object, Long> ex =
map.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.groupingBy(v -> v, Collectors.counting()));
System.out.println(ex);
A saída é
{0=2, 1=3, 2=3, 3=3, 4=3, 5=2}.
Isso significa que 0 tem duas chaves, 1 tem três chaves e assim por diante. Agora eu quero classificar as chaves e os valores em ordem decrescente com base na contagem de chaves. Eu tentei algo assim:
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);
Eu quero a seguinte saída:
1=[2, 3, 0], 2=[1,4,0], 3=[1, 4, 5], 4=[2, 3, 5], 0=[1, 2], 5=[3, 4]
As chaves e os valores devem ser organizados em ordem decrescente de acordo com essa contagem de chaves{0=2, 1=3, 2=3, 3=3, 4=3, 5=2}
: 1, 2, 3, 4 tem três chaves, 0 e 5 têm duas chaves.
Por exemplo:1=[2, 3, 0]
: 1 possui três teclas, para que apareça primeiro com[2, 3, 0]
: 2 e 3 possuem três chaves e 0 possui apenas duas chaves.