ストリームの助けを借りて、ファイル名から拡張子を削除します

口:

現在、私は拡張子を持つ私にファイル名を返していると私は、Java 8のストリーム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()、つまりはストリームにそれを適用する、またはそれの後にそれを適用しますOptionalストリームの怠惰な性質のために、それはまだここだけ最初に一致した要素に適用されます。しかし、私は維持好む.endsWith(".txt")テストとその後に.substring(0, name.length()-".txt".length())この2つのステップの間の関係をより明確にするために、できるだけ近く一緒にと。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=202821&siteId=1