我是 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/