在Java 8中使用Stream API解析文件
生活随笔
收集整理的這篇文章主要介紹了
在Java 8中使用Stream API解析文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java 8中到處都有流。只需四處看看,可以肯定地找到它們。 它也適用于java.io.BufferedReader 。 使用Stream API在Java 8中解析文件非常容易。
我有一個要讀取的CSV文件。 下面的例子:
我的閱讀器的一項合同是提供標頭作為字符串列表,并提供所有記錄作為字符串列表。 我的閱讀器接受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字节码的人