Вы тратите ресурсы, конвертируя путь в строку несколько раз.Если предполагаемый конечный результат в любом случае является строкой, вы можете отобразить строку прямо как первый шаг, поэтому вам не нужно повторять ее.
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()
, т.е. примените его к потоку или после него, применив его к Optional
.Из-за ленивого характера потока он все равно будет применяться только к первому соответствующему элементу.Но я предпочитаю держать тест .endsWith(".txt")
и последующий .substring(0, name.length()-".txt".length())
как можно ближе друг к другу, чтобы сделать связь между этими двумя шагами более очевидной.