Java 8-用于循环的immutablemap

wak*_*aka 1 java guava java-8

对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(..);
Run Code Online (Sandbox Code Playgroud)

但是,现在我有一个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>
Run Code Online (Sandbox Code Playgroud)

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

Rom*_*hyn 5

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

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...
Run Code Online (Sandbox Code Playgroud)

或更新至此

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