2015-10-11 5 views
0

Как вернуть значение String из Optional<String> с использованием ifPresent и избежать 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"); 
} 
+0

другой способ я могу сделать что-то вроде этого, return someList.stream(). Уменьшить ("значение по умолчанию", (n1, n2) -> n1.length()> n2.length()? N1: n2) ; но я искал, есть ли способ вернуть значение строки Дополнительно longName = someList.stream(). Reduce ((n1, n2) -> n1.length()> n2.length()? N1: n2); return longName.ifPresent() –

ответ

1

Чтобы вернуть значение факультативный или значение по умолчанию, если опция не имеет значения, вы можете использовать orElse(other).

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

Обратите внимание, что я переписал код для поиска самого длинного названия: вы можете напрямую использовать max(comparator) с компаратором, сравнивающей длиной каждой строки. Один такой компаратор может быть получен путем вызова Comparator.comparingInt(keyExtractor), причем ключ-экстрактор является ссылкой метода String::length.

+0

return longNameOpt.orElse ("нет"); было то, что я искал. благодаря –

Смежные вопросы