我正在尝试创建一个简单的解析util,它转换一个两列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。我排除了无效的文件路径,因为它在另一个单元测试中运行良好,并且键值出现在CSV中。我已经盯着它看了几个小时了,我想也许有人能指出我的错误。
此外,我对Java8相当陌生,所以如果有人知道更好/更干净的写作方式,我会感谢反馈。
以一种可能更容易阅读的形式使用映射
public static Map<String, String> getMapFromCSV(final String filePath) throws IOException {
try(Stream<String> lines = Files.lines(Paths.get(filePath))) {
return lines.collect(
mapping(s -> s.split(","), toMap(k -> k[0], v -> v[1])));
}
}
正如fge所评论的那样,使用try-with资源使这变得更容易。
这是你的答案中的代码,但是使用资源试用来自动关闭一个也是AutoCloseable
的Stream
。还有一些添加了呼吸空间的空间字符。
public static Map<String, String> getMapFromCSV(final String filePath) throws IOException{
try (
Stream < String > lines = Files.lines( Paths.get( filePath ) );
)
{
Map < String , String > resultMap =
lines.map(
line -> line.split( "," )
)
.collect(
Collectors.toMap( line -> line[0] , line -> line[1] )
);
return resultMap;
}
// The `Stream` named `lines` is automatically closed at this point by the try-with-resources.
}
当使用资源尝试的{…}
块结束时,在try
中打开的所有资源都会自动关闭,顺序与打开顺序相反。无论控制流是在完成时优雅地离开块,还是由于异常或返回而突然离开块(如代码中所示),都是如此。请参阅关于这个问题的讨论,尝试使用java中的参考资料和返回语句。
好的,我添加了行。close()
并从csv中删除所有空白,它就可以工作了!奇怪的是,考虑到csv在我的另一种方法中得到了很好的解析。下面是它的样子:
public static Map<String, String> getMapFromCSV(final String filePath) throws IOException{
Stream<String> lines = Files.lines(Paths.get(filePath));
Map<String, String> resultMap =
lines.map(line -> line.split(","))
.collect(Collectors.toMap(line -> line[0], line -> line[1]));
lines.close();
return resultMap;
}
问题内容: 我需要将Java转换为的实例(包括地图内容) 我应该怎么做才能使此代码可编译? 问题答案: 从Collectors.toMap(…)javadoc: 例如:
更正:正如你们所指出的,我使用的是Java7。现在,方法就在那里。但问题仍然适用: 如何从字符串中获取?
问题内容: 谁能指导我如何使用PHP将XLS转换为CSV? 我有一个包含文档列表的Excel电子表格,我想使用PHP将其转换为CSV格式。 问题答案: 也许您可以开始使用PHP阅读XLS。 然后,使用主逻辑输出所需的内容(您的情况下为csv)。 祝好运,
我有一个任务:返回一个公司地图,其中键是它的名称,值是存储为String的员工列表,由和组成,用空格分隔。这是我的解决方案和它的工作罚款: 所以我的问题是,如何转换
我有一个复杂的要求,列表中记录有注释。我们有一个报告的功能,每个变化都应该被记录和报告。因此,根据我们的设计,即使单个字段已更新,我们也会创建一个全新的记录。 现在,我们希望将注释的历史记录(按时间戳反向排序)存储在数据库中。运行查询后,我得到了评论列表,但它包含重复的条目,因为其他一些字段被更改。它还包含空条目。 我编写了以下代码来删除重复和空条目。 这个逻辑工作正常,现在已经过测试了,但是我想
问题内容: 我有一个要转换为CSV文件的JSON文件。如何使用Python执行此操作? 我试过了: 但是,它没有用。我正在使用Django,收到的错误是: 然后,我尝试了以下方法: 然后我得到错误: 样本json文件: 问题答案: 首先,你的JSON具有嵌套对象,因此通常无法直接将其转换为CSV。你需要将其更改为以下内容: 这是从中生成CSV的代码: 你将获得以下输出: