gpt4 book ai didi

java - 将 Java Tokenizer 转换为 Stream 对象以利用过滤

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:46 25 4
gpt4 key购买 nike

我正在编写一些基本的文件 i/o 代码,并认为我可以利用 Java 8 Streams;特别是过滤。最终目标是读入文件并仅标记适用的行。以下是我当前的代码:

 public void readInFile(String csvFile){

BufferedReader br = null;
String line = "";
final String csvSplitBy = ",";

try {

br = new BufferedReader(new FileReader(csvFile));
while ((line = br.readLine()) != null) {
String[] transaction = line.split(csvSplitBy);
transactions.add(new QBTransaction(
new TransactionDetails(transaction[TRANSACTION_DATE],
transaction[TRANSACTION_NUM],
transaction[TRANSACTION_NAME],
Double.parseDouble(transaction[TRANSACTION_AMOUNT]))));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
transactionServiceImpl.addAll(transactions);
}

非常样板。这是使用 Stream 的代码:

public void parseFile(String fileName) {

try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
stream
.filter(w -> w.startsWith("Payment"))
//create object
} catch (IOException e) {
e.printStackTrace();
}
}

有没有办法在 foreach 中放置分词器,或者输出一个 String 对象,我可以将其提供给另一个方法?

最佳答案

您拥有的两段代码没有做同样的事情,但您的问题听起来像是您不知道 map(mapper)方法。此方法允许将每个 Stream 元素转换(即映射)为另一个元素。在这种情况下,我们要映射两件事:

  • 每一行组成一个事务,也就是用分隔符分割的行
  • 每个交易String转化为一个真实的交易对象

因此,我们可以有两个 map 操作:

List<QBTransaction> transactions = null;
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
transactions =
stream.filter(w -> w.startsWith("Payment"))
.map(l -> l.split(csvSplitBy))
.map(t -> new QBTransaction(new TransactionDetails(
t[TRANSACTION_DATE],
t[TRANSACTION_NUM],
t[TRANSACTION_NAME],
Double.parseDouble(t[TRANSACTION_AMOUNT])
)))
.collect(Collectors.toList());
}
transactionServiceImpl.addAll(transactions);

其余代码将其收集到一个列表中,最后通过将该列表作为参数来调用您的服务。

关于java - 将 Java Tokenizer 转换为 Stream 对象以利用过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35350390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com