tsc*_*dia 4 java java-8 java-stream
我得到了以下问题:我有一个Map<?,?>,我从一个 PList 文件中解析它,简化为:
Map<String, String> m = (Map<String, String>) getMap();
Run Code Online (Sandbox Code Playgroud)
该getMap()方法只是读取文件(.plist)。我想将所有值解析为 String,但不幸的是 Map 包含整数,导致稍后在此过程中出错。所以我想编写一个使用过滤器将所有内容转换为字符串的方法:
我的做法是:
m.entrySet().stream()
.map(e -> e.getValue())
.filter(e -> e instanceof Integer)
.map(e -> String.valueOf(e))
.collect(Collectors.toMap(e -> e.keys(), e -> e.getValue()));
Run Code Online (Sandbox Code Playgroud)
问题是,最后的收集不起作用,我该如何解决?结果应该又是一张地图。
非常感谢!
你误解了Collectors.toMap它的工作原理 - 它需要两个函数,一个给定一个条目产生一个新的键,一个给定一个条目产生一个新值。然后映射中的每个条目都应用了这两个函数,并且该单个元素的结果键/值用于构造新映射中的新条目。
此外,通过将每个条目仅映射到值,您会失去键和值之间的关联,这意味着您无法正确重建映射。
更正后的版本是:
Map<String, String> n;
n = m.entrySet()
.stream()
.filter(e -> e.getValue() instanceof Integer)
.collect(Collectors.toMap(e -> e.getKey(),
e -> String.valueOf(e.getValue())));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3008 次 |
| 最近记录: |