gpt4 book ai didi

java-8 - Java 8 将多个文件平面图流式传输到行

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

给定一个文件名数组:

bigList = Arrays.stream(files)
.flatMap(file - > {
try {
return Files.lines(Paths.get(path + SEPARATOR + file));
} catch (IOException e) {
LOGGER.log(Level.WARNING, "No se puede encontrar el archivo " + file);
}
return null;
})
.filter(str - > str.startsWith("ABC"))
.distinct()
.map(Mapper::mapToObj)
.collect(Collectors.toList());

当我使用传统的 for 循环(而不是 Arrays.stream(..).flatMap(..))时,这会返回不同的输出

for (String file: files) {
bigList.addAll(Files.lines(Paths.get(path + SEPARATOR + file))
.filter(str - > str.startsWith("ABC"))
.distinct()
.map(Mapper::mapToObj)
.collect(Collectors.toList()));
}

为什么会这样?

提前致谢

干杯

最佳答案

是因为调用了distinct() .

当您调用 flatmap 时, 它将所有文件中的所有行合并为一个 Stream<String> , 所以 distinct()将返回所有文件中不同的行。

当你使用 for 循环时,你只是在调用 distinct()分别在每个文件的行上。因此,当您将它们添加到列表中时,如果同一行存在于不同的文件中,仍然可能存在重复项。

关于java-8 - Java 8 将多个文件平面图流式传输到行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39597090/

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