将番石榴的ImmutableSortedMap用作频率图

时间:2019-12-17 20:49:57

标签: java java-8 guava

当我想创建频率图时,我在理解如何使用ImmutableSortedMap.toImmutableSortedMap()时遇到问题。我知道Multisetasked about that previously and got excellent help),但这次我不想使用它,因为这将需要我编写一个自定义序列化程序来创建一个适用于所述使用者的json表示形式。 json。

下面的代码有效,即它创建了所需的频率图,并按升序对键进行排序,但是它使用了一个临时图,然后我用它来创建ImmutableSortedMap我想摆脱临时地图。我在这种情况下尝试使用toImmutableSortedMap()收集器方法的尝试未能生成甚至可以编译的代码...

我正在使用Java 8和 Guava 版本 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
}

2 个答案:

答案 0 :(得分:6)

 Map<String, Long> result =
        Stream.of("b", "a", "c", "b")
              .collect(ImmutableSortedMap.toImmutableSortedMap(
                  Comparator.naturalOrder(),
                  Function.identity(),
                  x -> 1L,
                  Long::sum
              ));

答案 1 :(得分:2)

您甚至可以在不使用番石榴的情况下达到类似的效果(不可修改排序 gcloud cli)。

Map