对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)
谁能指出我在这里做错了什么?非常感谢您的帮助!
您必须从构建器构建地图。将您的代码更新为:
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)
| 归档时间: |
|
| 查看次数: |
1581 次 |
| 最近记录: |