在Java 8中使用Stream API解析文件
Java 8中到处都有流。只需四处看看,可以肯定地找到它们。 它也适用于java.io.BufferedReader
。 使用Stream API在Java 8中解析文件非常容易。
我有一个要读取的CSV文件。 下面的例子:
username;visited
jdoe;10
kolorobot;4
我的阅读器的一项合同是提供标头作为字符串列表,并提供所有记录作为字符串列表。 我的阅读器接受java.io.Reader
作为阅读源。
我将从阅读标题开始。 读取标头的算法如下:
- 打开阅读源,
- 获取第一行并进行解析,
- 用分隔符分割线,
- 获取第一行并进行解析,
- 将行转换为字符串列表并返回。
并执行:
class CsvReader {private static final String SEPARATOR = ";";private final Reader source;CsvReader(Reader source) {this(source);}List<String> readHeader() {try (BufferedReader reader = new BufferedReader(source)) {return reader.lines().findFirst().map(line -> Arrays.asList(line.split(SEPARATOR))).get();} catch (IOException e) {throw new UncheckedIOException(e);}}
}
很简单。 不言自明。 同样,我创建了一种读取所有记录的方法。 读取记录的算法如下:
- 打开阅读源,
- 跳过第一行,
- 用分隔符分割线,
- 在将行映射到字符串列表的每一行上应用一个映射器。
并执行:
class CsvReader {List<List<String>> readRecords() {try (BufferedReader reader = new BufferedReader(source)) {return reader.lines().substream(1).map(line -> Arrays.asList(line.split(separator))).collect(Collectors.toList());} catch (IOException e) {throw new UncheckedIOException(e);}}
}
这里没什么好看的。 您可能会注意到,这两种方法中的映射器完全相同。 实际上,可以很容易地将其提取为变量:
Function<String, List<String>> mapper = line -> Arrays.asList(line.split(separator));
最后,我创建了一个简单的测试。
public class CsvReaderTest {@Testpublic void readsHeader() {CsvReader csvReader = createCsvReader();List<String> header = csvReader.readHeader();assertThat(header).contains("username").contains("visited").hasSize(2);}@Testpublic void readsRecords() {CsvReader csvReader = createCsvReader();List<List<String>> records = csvReader.readRecords();assertThat(records).contains(Arrays.asList("jdoe", "10")).contains(Arrays.asList("kolorobot", "4")).hasSize(2);}private CsvReader createCsvReader() {try {Path path = Paths.get("src/test/resources", "sample.csv");Reader reader = Files.newBufferedReader(path, Charset.forName("UTF-8"));return new CsvReader(reader);} catch (IOException e) {throw new UncheckedIOException(e);}}
}
翻译自: https://www.javacodegeeks.com/2014/05/parsing-a-file-with-stream-api-in-java-8.html
在Java 8中使用Stream API解析文件相关推荐
- 在Java 8中使用Stream API列出ZIP文件的内容
在Java 8 java.util.zip.ZipFile配备了stream方法,该方法可以非常轻松地浏览ZIP文件条目. 在此博客文章中,我将展示许多示例,这些示例显示了我们可以如何快速浏览ZIP文 ...
- Java SE 9:Stream API的改进
发表简要目录: (Post Brief Table of Content:) Introduction介绍 Java SE 8: Stream API BasicsJava SE 8:Stream A ...
- Java 8 中的 Streams API 详解
Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作,或者大批量数据操作 .Stream API 借助于同样新出现的 L ...
- 从Java 11中删除的API
在看到一些Java 10中删除了API之后, Java 11 ( JSR 384 )看起来将删除更多API. 在最近的OpenJDK java-se-spec-experts邮件列表帖子" ...
- java io 文件路径_如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径...
如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径 我有一个包含2个包的项目: ListStopWords.txt ListStopWords.txt 在包(2)中我有 ...
- Java实现pdf转tex_使用Free Spire.PDF在Java程序中创建和转换PDF文件
在这篇文章中,我将举例说明如何创建一个包含标题,段落,图像,编号列表和表格的简单的PDF文件,以及如何使用Free Spire.PDF将PDF转换为其他文件格式. 概述 Free Spire.PDF ...
- 在Java程序中创建和转换PDF文件
点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 作者: Codingqi123 来源: jianshu.com/p/db15232987 ...
- java 8 中文字体_在java程序中直接使用中文字体文件
在java程序中直接使用中文字体文件.代码中的hb.ttf文件请用你自己的中文字体文件代替 java学习 java培训 软件工程师 如何学习java 学习java哪里好 东方清软java培训 清软国际 ...
- 解决java web中safari浏览器下载后文件中文乱码问题
解决java web中safari浏览器下载后文件中文乱码问题 参考文章: (1)解决java web中safari浏览器下载后文件中文乱码问题 (2)https://www.cnblogs.com/ ...
最新文章
- 关于cookie的文章(cookie与session机制)
- MATLAB——nctoolbox安装及使用
- c语言ssl通信,利用 OpenSSL 的 C/S 安全通信程序设计
- Chapter 7 Windows下pycaffe的使用之draw_net.py
- 团队项目第一篇——NABCD
- 陆正耀为瑞幸数据造假道歉:非常自责 会全力挽回损失
- 物流系统车辆仓库定位的实现——基于RFID定位的实现方法
- PLM 问卷调查表-A 关于公司
- 我拿什么拯救你,混乱的思维?不如试试这3款神器
- leetcode 名单 Insertion Sort List
- aix中c语言生成pdf文档,利用PDFLib生成PDF文档
- linux查看cuda驱动程序,我的nvidia驱动程序的正确CUDA版本是什么?
- 微信小程序使用font awsome图标库(最新fontawsome5)
- Commit cannot be completed since the group has already rebalanced and assign
- iOS开发除了XCode还需要掌握的8个重要工具,让您开发更容易
- C语言实验题目[01]
- 你应该在你的域名中使用www吗?
- 主引导记录(MBR)信息分析与获取
- 【QtScrcpy】开源的投屏控制软件 - 安利
- 交换机与路由器技术-03-交换机基本配置