java 8 - 循环的不可变映射

标签 java java-8 guava

我是 java 的新手,我最初使用了一个 hashmap 并对其执行了一个 forEach,它运行良好:

Map<String, Integer> testmap = new HashMap<>();
IntStream.range(0, 100).forEach(n -> {
                testmap.put("teststring-" + Integer.toString(n), 1);
            });
String x = testmap.entrySet().stream().filter(..);

但是,现在我有一个 ImmutableHashMap,我想执行与上述相同的步骤,我该怎么做?我试过做

ImmutableMap.Builder<String, Integer> testmap = ImmutableMap.builder(); 
IntStream.range(0, 100).forEach(n -> {
            testmap.put("teststring-" + Integer.toString(n), 1);
        });
testmap.build();
String x = testmap.entrySet().stream().filter(...); // throws an error while compile

cannot find symbol
    [javac]         String testmap = testmap.entrySet().stream()
    [javac]                                ^
    [javac]   symbol:   method entrySet()
    [javac]   location: variable streams of type Builder<String,Integer>

谁能指出我在这里做错了什么?非常感谢您的帮助!

最佳答案

您必须从构建器构建 map 。将您的代码更新为:

ImmutableMap.Builder<String, Integer> testmapBuilder = ImmutableMap.builder();
IntStream.range(0, 100).forEach(n -> testmapBuilder.put("teststring-" + Integer.toString(n), 1));
ImmutableMap<String, Integer> testmap = testmapBuilder.build();
//your code...

或者更新到这个

Map<String, String> testmap = IntStream.range(0, 100)
        .mapToObj(Integer::toString)
        .collect(collectingAndThen(toMap(n -> "teststring-" + n, o -> "1"), ImmutableMap::copyOf));

关于java 8 - 循环的不可变映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43056244/

相关文章:

java - 我是否使用 Google Guava 正确实现了 equals 和 hashCode?

java - 是否可以用特定类型的值初始化通用变量?

java - 如何使用 Sikuli Java Standalone jar 输入文本?

java - 如何递归显示列表的元素?

java - 应用程序关闭时清理 JSF session 范围 bean

java - 在 Guava 中使用 FluentIterables 为集合中的每个元素添加索引号

java - 将函数列表应用于 Java 流 .map() 方法

java - 返回在响应的特定条件下首先执行的 future

Java(8) : How to extract an specific class item from objects array?

java - 如何使用 Guava 的 MultiMap 输出唯一键? ( java )