Optional 的返回值

Pav*_*nik 2 java optional java-8

如何StringOptional<String>usingifPresent和 avoid返回值NullPointerException

例子:

public String longestName() {
    Optional<String> longName = someList.stream().reduce((name1, name2) -> name1.length() > name2.length() ? name1 : name2);

    // If I do not want to use following
    // return longName.isPresent() ? longName.get() : "not present";

    // Can I achieve this using longName.ifPresent or longName.orElse("not present");
}
Run Code Online (Sandbox Code Playgroud)

Tun*_*aki 5

要返回可选项的值,或者如果可选项没有值则返回默认值,您可以使用orElse(other).

public String longestName() {
    Optional<String> longNameOpt = someList.stream().max(Comparator.comparingInt(String::length));
    return longNameOpt.orElse("not present");
}
Run Code Online (Sandbox Code Playgroud)

请注意,我重新编写了用于查找最长名称的代码:您可以直接使用max(comparator)比较器比较每个字符串的长度。一个这样的比较器可以通过调用Comparator.comparingInt(keyExtractor)作为方法引用的密钥提取器来获得String::length