Sort keys of multimap by highest value they contain
guava, java, multimap, sorting
Solution
If I were you, I'd start by not using a `Multimap`, but rather, using a `Map` to track the greatest value associated with each key. Then, you have a `Map<String, Integer>`, and if you don't need to save the `Map` afterwards, then I'd do something like
final Map<String, Integer> map = ...
return Ordering.natural().onResultOf(Functions.forMap(map)).reverse()
// a comparator to compare strings in descending order of their
// associated values
.immutableSortedCopy(map.keySet());
To unpack a bit:
Ordering.natural() // the natural ordering on integers
.onResultOf(
Functions.forMap(map) // use the Map<String, Integer> as a Function
// this ordering now compares Strings by the natural ordering of
// the integers they're mapped to
.reverse(); // reverses the ordering, so it now sorts in descending order
Problem
I using a Guava MultiMap (impl LinkedListMultimap) to allow me to store multiple values for a key, but then I want to sort the map by the highest value and return the keys. i.e After first run I have ``` key1:{13} key2:{7} key3:{11} ``` After second run I now have ``` key1:{13,14} key2:{7,18} key3:{11,1} ``` After third run I now have ``` key1:{13,14,16} key2:{7,18,6} key3:{11,1,22} ``` I want an order of ``` key3 key2 key1 ``` and I want to output the keys (I dont need to know the values any longer) I cant work out a way to do that, I dont have to use MultiMap it just looked like it might help