我正在尝试创建一个简单的解析工具,将双列CSV文件转换为映射。
public Map<String, String> getMapFromCSV(final String filePath) throws IOException {
return Files.lines(Paths.get(filePath))
.map(line -> line.split(","))
.collect(Collectors.toMap(line -> line[0], line -> line[1]));
}
正如你所看到的,我正在创建一个字符串流,将每一行以逗号为分隔符转换为一个字符串数组,最后将键映射到索引0,值映射到索引1。
@Test
public void testGetMapFromCSV() throws IOException{
actual = util.getMapFromCSV(filePath).get("AL");
expected = "ALABAMA";
assertEquals(expected, actual);
}
出现这种情况,是因为当我运行这个测试时,实际值为null。我排除了无效的filePath,因为另一个单元测试中它工作得很好,并且在CSV中存在键值。我已经盯着它看了几个小时,觉得也许有人能指出我的错误。
另外,我对Java 8还比较新,如果有人知道更好/更清晰的编写方式,我将感激不尽。
Files.lines()
。 - fgenull
可能意味着map.get(key)
在 map 中找不到key
。尝试打印由util.getMapFromCSV(filePath)
返回的整个 map。 - Pshemo.close()
方法。你必须自己去做。 (顺便说一下,实现AutoCloseable
的是BaseStream
,而Stream
则扩展了BaseStream
) - fge