Actualmente tengo un código que me está volviendo nombre de archivo con la extensión y haga que estoy usando java 8 api corriente. Pero me gustaría, así recortar la cadena en la misma corriente.
return Files.walk(Paths.get(qPath))
.filter(extension -> extension.toString().endsWith(".txt"))
.map(Path::getFileName)
.findFirst()
.map(Path::toString)
.get();
¿Alguna idea de cómo quitar .txt de cadena en la corriente?
Usted está perdiendo recursos mediante la conversión de la ruta de acceso a una cadena varias veces. Cuando el resultado final que se pretende es una cadena de todos modos, se puede asignar a un derecho cadena como el primer paso, por lo que no es necesario repetirlo.
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();
Tenga en cuenta que esto no importa si usted coloca el último .map(…)
paso antes de la findFirst()
, es decir, se aplica a la corriente, o después de ella, aplicándolo al Optional
. Debido a la naturaleza lenta de la corriente, todavía sólo se aplica al primer elemento a juego aquí. Pero yo prefiero dejar la .endsWith(".txt")
prueba y la posterior .substring(0, name.length()-".txt".length())
tan cerca como sea posible, para que la relación entre estas dos medidas más obvias.