java 处理Lambda表达式中的异常

bt1cpqcv  于 2023-01-16  发布在  Java
关注(0)|答案(3)|浏览(248)

下面代码的等价lambda表达式是什么?

List<String> List = new ArrayList<String>();
for (String var: alreadyList) {
     try {
         if (getNumber(var) == num) {
             filteredList.add(var);
         }
     } catch(NullPointerException exception) {
           throw exception;
     }
 }
  • getNumber方法抛出Nullpointerexception,并且上述代码也位于向调用方抛出相同异常的方法中。

这是常见的lambda表达式,但如何在其中添加Nullpointerexception

List<String> List = alreadyList.stream()
            .filter(var -> getNumber(var) == num)
            .collect(Collectors.toList());
wd2eg0qa

wd2eg0qa1#

捕获NPE是不好的做法。NPE是未检查的异常。从docs
如果参数为null,则该方法可能会引发NullPointerException,这是一个未经检查的异常。
相反,为什么不添加另一个过滤器到流:

List<String> List = alreadyList.stream()
        .filter(e -> e!= null)
        .filter(var -> getNumber(var) == num)
        .collect(Collectors.toList());
raogr8fs

raogr8fs2#

捕捉NullPointerException是一种不好的做法。您可以使用Optional类来避免它,并且仅在对象存在时执行必要的操作。您可以从getNumber()方法引发其他异常,而不会出现任何问题

nue99wik

nue99wik3#

永远不要捕捉包括NullPointerException在内的未检查异常。你所做的只是重新抛出它。或者过滤掉null值。

List<String> List = alreadyList.stream()
                               .filter(Objects::nonNull)
                               .filter(var -> getNumber(var) == num)
                               .collect(Collectors.toList());

您提供的代码:

List<String> List = alreadyList.stream()
                               .filter(var -> getNumber(var) == num)
                               .collect(Collectors.toList());

已经抛出NullPointerException以防getNumber(var)失败。您的try-catch没有做任何不同的事情。

相关问题