日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

在Java 8中使用Stream API解析文件

發布時間:2023/12/3 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在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解析文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。