use*_*672 3 java lambda java-8 java-stream collectors
想象一下,我有一个像这样的文件:
1, Apple
1, Pear
1, Orange
2, Apple
3, Melon
3, Orange
Run Code Online (Sandbox Code Playgroud)
我想把它解析成一个列表,每个条目都是一个地图,或者我猜它可能是我自己的对象,但我认为一张地图最好,因为它是一把钥匙.值.
我在努力:
private List<Map<String, String>> readRecords(String path) {
return Files.lines(Paths.get(path))
.map(line -> Arrays.asList(line.split(SEPARATOR)))
.map(snippets -> new HashMap<Integer, String>().put(Integer.parseInt(snippets.get(0)), snippets.get(1)))
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
但这给了我一个关于无法在List<String>和之间转换的错误List<Map<String, String>>
或者也许有更好的方法来做到这一点?
除了返回类型不正确(List<Map<Integer, String>>)之外,该put方法还将为您提供先前映射的值(如果有).
所以
.map(snippets -> new HashMap<Integer, String>().put(Integer.parseInt(snippets.get(0)), snippets.get(1)))
Run Code Online (Sandbox Code Playgroud)
实际上是一个映射,List<String> -> String而不是List<String> -> Map<Integer, String>.
如果你想坚持官方API,我会返回一个List<SimpleEntry<Integer, String>>代替,因为每一行代表一个键值对,并将map调用更改为:
.map(snippets -> new SimpleEntry<>(Integer.parseInt(snippets.get(0)), snippets.get(1)))
Run Code Online (Sandbox Code Playgroud)
...或收集整个内容Map<Integer, List<String>>(看groupingBy收藏家).
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |