I have map Map<Type, Long> countByType
and I want to have a list which has sorted (min to max) keys by their corresponding values. My try is:
countByType.entrySet().stream().sorted().collect(Collectors.toList());
however this just gives me a list of entries, how can I get a list of types, without losing the order?
A map is not meant to be sorted, but accessed fast. Object equal values break the constraint of the map. Use the entry set, like List<Map.
You have to sort with a custom comparator based on the value of the entry. Then select all the keys before collecting
countByType.entrySet() .stream() .sorted((e1, e2) -> e1.getValue().compareTo(e2.getValue())) // custom Comparator .map(e -> e.getKey()) .collect(Collectors.toList());
You say you want to sort by value, but you don't have that in your code. Pass a lambda (or method reference) to sorted
to tell it how you want to sort.
And you want to get the keys; use map
to transform entries to keys.
List<Type> types = countByType.entrySet().stream() .sorted(Comparator.comparing(Map.Entry::getValue)) .map(Map.Entry::getKey) .collect(Collectors.toList());
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With