2017-09-21 18 views
3

期待どおりに動作しません:同じヌルをしていない私のサーブレットに投稿されたファイルから名前を取得することになっていますラムダフィルターは、私は私のコードでは、このラムダ式を使用してい

File slika = new File(tempPath + File.separator + imena.stream().filter(x -> !x.trim().equals("null")).findFirst().get()); 

ArrayList<String> imenaの内容を確認し、次のものが含まれていることを確認しました(カンマ区切り)。null、null、null、Photo0098.jpg最後のものは、私がサーバーに投稿したものと、フィルターによって取り上げられるはずのものですが、代わりにNULLポインター例外が発生します。同じコードは、ファイルのアップロードを扱う別のサーブレットでも動作します。他の場所で同じ条件で動作していても、なぜ私のコードがここで働いていないのか誰かに教えてもらえますか?

答えて

6

リストの値が実際のnullで、内容が"null"の文字列ではないようです。

File slika = 
new File(tempPath + 
     File.separator + 
     imena.stream().filter(Objects::nonNull).findFirst().get()); 
     // Here --------------^ 
+1

ありがとうございました。私は、文字列自体がnullと呼ばれていると思った。なぜなら、私のアップロードディレクトリでは、nullと呼ばれるファイルと、私が投稿したファイルがあったからだ。実際のヌルをフィルタリングすることは私の問題を解決します。 –

2

あなたの要素xがnullであるためです。Objects.nonNullにメソッド参照を使用すると、それらをフィルタリングするエレガントな方法です。 stringをトリムしようとすると、NullPointerExceptionが発生します。

この

File slika = new File(tempPath + File.separator + imena.stream().filter(x -> x != null).findFirst().get()); 
1

は、既存の文字列をトリミングしてみてはトリムには何が含まれているので、それは最初にNullPointerExceptionを投げるだろう他に、nullを返すことはありません。直接nullの値をフィルタリングします。

imena.stream().filter(x -> x != null).findFirst().get(); 
関連する問題