Использование лямбда-выражения для доступа к значению в карте с использованием необязательного ключа

#java #lambda

#java #лямбда

Вопрос:

Мне нужно получить доступ к значению с карты M<X,Y> , и у меня есть ключ типа Optional<X> key . Мне нужно использовать лямбда-выражение, чтобы я мог проверить, присутствует ли ключ, если присутствует, получить доступ к значению, используя его, в противном случае вернуть пустой.

Я делаю:

 return key.ifPresent(xx -> {
    Optional.of(M.getOrDefault(foo(xx), null));
});
  

Но он предоставляет тип void, но требуемый тип является необязательным. Предложения по этому поводу?

Комментарии:

1. Итак, у вас действительно есть Map<Optional<X>, Y> ? Почему? Ищете что-то вроде if(map.containsKey(key) amp;amp; key.isPresent()) { return map.get(key.get());}else{return null;} ?

2. Разве вы не хотели Optional.ofNullable бы, чтобы ваша карта по умолчанию была null ?

3. Ваш код сбивает с толку. Попробуйте добавить свой ввод и ожидаемый результат.

4. Карта имеет тип M<X,Y>. у меня есть необязательный ключ <X>, я должен проверить, не является ли ключ null . Если это не так, я передам его функции, чтобы преобразовать его в какую-либо другую форму и использовать это для доступа к карте. Если null, верните Optional.empty().

5. Похоже x.map(xx -> M.getOrDefault(foo(xx), null)); , что здесь .map() возврат необязателен

Ответ №1:

вы могли бы искать что-то вроде:

 private Optional<Y> findingY( Map<X,Y> M, Optional<X> key) {
    return key.map(M::get);
}
  

Комментарии:

1. Именно то, что я искал. Большое вам спасибо!