I have a problem understanding how to use ImmutableSortedMap.toImmutableSortedMap()
, when I want to create a frequency map. I know about Multiset
(asked about that previously and got excellent help), but I don't want to use it this time, because it will require me to write a custom serializer to create a json representation that works for the consumers of said json.
The below code works, i.e. it creates the desired frequency map, sorted on key in ascending order, but it uses a temporary map, which I then use to create the ImmutableSortedMap
. I would like to get rid of the temporary map. My attempts to use toImmutableSortedMap()
collector method for this scenario failed to produce code that even compiled...
I am using Java 8 and Guava version 28.1
@Test
public void test() {
Map<String, Long> intermediateMap = Stream.of("b", "a", "c", "b")
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
ImmutableSortedMap<String, Long> desiredMap = ImmutableSortedMap.copyOf(intermediateMap);
System.out.println(desiredMap); // Outputs {a=1, b=2, c=1}, which is the desired state
}
Map<String, Long> result =
Stream.of("b", "a", "c", "b")
.collect(ImmutableSortedMap.toImmutableSortedMap(
Comparator.naturalOrder(),
Function.identity(),
x -> 1L,
Long::sum
));
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