java - 使用 Guava 的 ImmutableSortedMap 作为频率图

标签 java java-8 guava

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

下面的代码有效,即它创建了所需的频率图,按键升序排序,但它使用一个临时图,然后我用它来创建 ImmutableSortedMap . 我想去掉临时 map .我尝试使用 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
}

最佳答案

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

关于java - 使用 Guava 的 ImmutableSortedMap 作为频率图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59381882/

相关文章:

Java8 Parallel Stream 花时间求和值

java - 使用 DateTimeFormatter 显示短时区名称

java - 在 Java 中实例化 BiMap 的 google-collections

java - 在同一台计算机上设置 JBoss 的多个实例

java - 在 java 中实现一个简单的泛型函数时出现编译错误?

java - 通过蓝牙连接

java - Guava/Voldemort/MySQL 刷新到数据库问题

java - 反射(reflection)——如何做?

java - 多流操作

java - 有效的 Java : Safety of Forwarding Classes