2016-06-22 3 views
4

У меня есть класс структуры, как это:Дополнительно Получение поля

public class Foo { 
    private FooB foob; 

    public Optional<FooB> getFoob() { 
     return Optional.ofNullable(foob); 
    } 
} 

public class FooB { 
    private int valA; 

    public int getValA() { 
     return valA; 
    } 
} 

Моя цель состоит в том, чтобы вызвать метод GET для fooB, а затем проверить, чтобы увидеть, если он присутствует. Если он присутствует, то верните свойство valA, если он не возвращает его сразу. Что-то вроде этого:

Integer valA = foo.getFoob().ifPresent(getValA()).orElse(null); 

Конечно, это не правильный синтаксис Java 8, но это мой «код psuedo». Есть ли способ достичь этого в Java 8 с 1 строкой?

ответ

15

То, что вы описываете это map метод:

Integer valA = foo.getFoob().map(f -> f.getValA()).orElse(null); 

map позволяет преобразовать значение внутри Optional с функцией, если значение присутствует, а только изменяет тип опциональный, если значение нет.

Обратите также внимание, что вы можете вернуть null из функции сопоставления, и в этом случае результат будет Optional.empty().

+8

Спелый кандидат на использование ссылки на метод; '.map (FooB :: getValA)'. –

1

Почему вы не добавляете метод getValue к классу Foo? Это будет своего рода делегация.

public class Foo { 
    ... 
    public Integer getValue() { 
     if (foob == null) { 
      return null; 
     } 
     return foob.getValA(); 
    } 
} 
Смежные вопросы