我在我的代码中使用了这个lambda表达式:
File slika = new File(tempPath + File.separator + imena.stream().filter(x -> !x.trim().equals("null")).findFirst().get());
它应该从发布到我的servlet的文件中获取一个名称,该名称不等于null。我检查了ArrayList<String> imena
的内容,发现它包含以下内容(以逗号分隔):null,null,null,Photo0098.jpg。最后一个是我发布到服务器的那个,以及应该被过滤器拾取的那个,而是我得到一个空指针异常。这段相同的代码可以在另一个处理文件上传的servlet上运行。有人可以告诉我为什么我的代码在这里工作不正常,即使它在其他地方工作的条件相同吗?
答案 0 :(得分:6)
看起来列表中的值是实际null
,而不是内容为"null"
的字符串。使用方法引用Objects.nonNull
是一种过滤它们的优雅方法:
File slika =
new File(tempPath +
File.separator +
imena.stream().filter(Objects::nonNull).findFirst().get());
// Here --------------^
答案 1 :(得分:2)
那是因为您的元素x
为空。当您尝试修剪string
NullPointerException
时,File slika = new File(tempPath + File.separator + imena.stream().filter(x -> x != null).findFirst().get());
。
试试这个
{{1}}
答案 2 :(得分:1)
修剪现有的String永远不会返回null
,因为它包含要修剪的任何内容,否则它将首先抛出NullPointerException。直接过滤null
值。
imena.stream().filter(x -> x != null).findFirst().get();