gpt4 book ai didi

java - 需要使用 lambda 映射多个文件中的归约行

转载 作者:行者123 更新时间:2023-12-02 02:25:00 24 4
gpt4 key购买 nike

我有许多文件需要逐行读取。每行包含一个 url,后跟一个时间戳,后跟一些标签

我有一个名为 Link 的类,它解析每一行并提供静态方法来获取

Link::url
Link::timestamp
Link::tags where this returns a List of tagstrings

网址可以与标签一起复制在文件中。我需要读取所有文件中的行,收集每个网址的标签并消除重复项然后将结果写入格式为 url tag1, tag2, tag3

的输出文件

我可以使用 Java 7 使用 map/reduce 来执行此操作,但无法弄清楚如何使用 lambda 表达式执行此操作。有人告诉我可以用一行代码完成?

这就是我所拥有的。我被过滤器卡住了。我认为我想要做的是创建一个带有 url 关键字的 map 和一个 TreeMap,其中 TreeMap 将包含所有唯一标签。我只是不知道如何写这个任何帮助将不胜感激。

public static void tagUnion() throws Exception {   
Stream<Path> fstream = Files.list(Paths.get(indir));
fstream.forEach(path -> {
Stream<String> lines;
try (Stream<String> entry = Files.lines(path)) {
entry
.filter(s -> !s.isEmpty())
.map(Link::parse)
.filter(map -> inDate(map.timestamp()));
// this is where I’m stuck
} catch (IOException e) {
e.printStackTrace();
}
});
}

最佳答案

我建议使用Stream::flatMap来代替。此方法将流中的每个对象映射到不同的流(所有对象类型相同),并将它们组合成一个可以继续处理的流。例如:

Files.list(somePath)
.flatMap(Files::lines)
.filter(s -> !s.isEmpty())
.map(Link::parse)
.filter(map -> inDate(map.timestamp()));

现在要做你所要求的事情需要编写一个方法来处理链接并将其解析为你想要的行。

最后,要将字符串流收集到带有分隔符(无论是换行符还是逗号)的一个字符串中,有一种方法:

String csvLine = stream.collect(Collectors.joining(",");

关于java - 需要使用 lambda 映射多个文件中的归约行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47918670/

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