从Optional返回值

24 浏览
0 Comments

从Optional返回值

如何使用ifPresent方法从Optional中返回一个String值,并避免NullPointerException?

示例:

public String longestName() {

Optional longName = someList.stream().reduce((name1, name2) -> name1.length() > name2.length() ? name1 : name2);

// 如果我不想使用以下代码

// return longName.isPresent() ? longName.get() : "not present";

// 我能否使用longName.ifPresent或longName.orElse("not present")来实现这一点?

}

0
0 Comments

问题的出现原因是在这段代码中,我们使用了一个Optional对象,并且希望在Optional没有值的情况下返回一个默认值。然而,我们没有使用正确的方法来实现这一目标。

解决方法是使用Optional的orElse方法。这个方法接受一个默认值作为参数,如果Optional对象没有值,就会返回这个默认值。

在这段代码中,我们首先使用stream的max方法和一个比较器来找到列表中最长的字符串。这个方法返回一个Optional对象,表示找到的最长字符串。然后,我们使用orElse方法,如果Optional对象没有值,就返回字符串"not present"作为默认值。

重新编写的代码如下:

public String longestName() {
    Optional longNameOpt = someList.stream().max(Comparator.comparingInt(String::length));
    return longNameOpt.orElse("not present");
}

这样,无论最长的字符串是什么,我们都可以确保返回一个非空的字符串作为结果。

通过使用orElse方法,我们可以避免在Optional对象没有值时出现空指针异常的情况,确保代码的健壮性和可靠性。

0