给定一个文件名数组:
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()));
}为什么会发生这种情况?
提前感谢
干杯
发布于 2016-09-20 14:51:49
这是因为对distinct()的调用。
当您调用flatmap时,它将所有文件中的所有行组合到一个Stream<String>中,因此distinct()将返回所有文件中不同的行。
当您使用for循环时,您只对每个文件中的行调用distinct()。因此,当您将它们添加到您的列表中时,如果在不同的文件中存在相同的行,则仍然可能存在重复。
https://stackoverflow.com/questions/39597090
复制相似问题