目前我有一些代码返回我的文件名和扩展名,为此我正在使用 java 8 stream api。但我也想修剪同一个流中的字符串。
return Files.walk(Paths.get(qPath))
.filter(extension -> extension.toString().endsWith(".txt"))
.map(Path::getFileName)
.findFirst()
.map(Path::toString)
.get();
知道如何从流中的字符串中删除 .txt 吗?
最佳答案
多次将路径转换为字符串是在浪费资源。当预期的最终结果无论如何是一个字符串时,您可以在第一步直接映射到一个字符串,因此您不需要重复它。
return Files.walk(Paths.get(qPath))
.map(p -> p.getFileName().toString())
.filter(name -> name.endsWith(".txt"))
.map(name -> name.substring(0, name.length()-".txt".length()))
.findFirst()
.get();
请注意,将最后一个 .map(…)
步骤放在 findFirst()
之前(即将其应用于 Stream)或之后它,将其应用于 Optional
。由于 Stream 的惰性,它仍然只会应用于此处的第一个匹配元素。但我更喜欢保留 .endsWith(".txt")
测试和随后的 .substring(0, name.length()-".txt".length())
尽可能靠近,使这两个步骤之间的关系更加明显。
关于java - 在流的帮助下从文件名中删除扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54436783/