Extracto de las entradas en una lista, a continuación, ordenar la lista:
List<Map.Entry<String, String>> entries = new ArrayList<Map.Entry<String, String>>(map.entries());
Collections.sort(entries, new Comparator<Map.Entry<String, String>>() {
@Override
public int compare(Map.Entry<String, String> e1, Map.Entry<String, String> e2) {
return Ints.compare(map.get(e2.getKey()).size(), map.get(e1.getKey()).size());
}
});
A continuación, iterar sobre las entradas.
Editar:
Si lo que se desea es, de hecho, iterar sobre las entradas de la hoja interior (Entry<String, Collection<String>>
), a continuación, haga lo siguiente:
List<Map.Entry<String, Collection<String>>> entries =
new ArrayList<Map.Entry<String, Collection<String>>>(map.asMap().entrySet());
Collections.sort(entries, new Comparator<Map.Entry<String, Collection<String>>>() {
@Override
public int compare(Map.Entry<String, Collection<String>> e1,
Map.Entry<String, Collection<String>> e2) {
return Ints.compare(e2.getValue().size(), e1.getValue().size());
}
});
// and now iterate
for (Map.Entry<String, Collection<String>> entry : entries) {
System.out.println("Key = " + entry.getKey());
for (String value : entry.getValue()) {
System.out.println(" Value = " + value);
}
}
Gracias. Eso ordenará las entradas individualmente, pero ahora ya no tengo un Multimap, solo una lista de objetos Map.Entry. Así que he perdido la agrupación de valores en una sola clave. Lo que quiero es mantener el Multimap, pero simplemente reordenar los elementos para que estén en orden descendente según el número de valores. –
Dijiste que querías iterar sobre las entradas. Usted tiene una lista de entradas. Iteramos sobre estas entradas. El MultiMap sigue ahí, intacto. Un MultiMap no está ordenado, y ciertamente no por el número de valores para una clave dada. –
Disculpa, mi pregunta original no estaba del todo clara. Quiero poder iterar sobre el Multimap original, pero obtengo las entradas de conteo más altas primero. Además, TreeMultimap ha clasificado las claves (y los valores), por lo que no es necesariamente exacto decir que no se ha ordenado un Multimap. –