@n199a
Java

Как объединить два Stream, когда первый может выбросить exception в Java?

Имеется два слоя DAO:
1. Слой `TagDao` с методом `Optional findByName(String tagName) {...}`
1. Слой `GiftCertificateDao` с методом `Set findByTag(Tag tag) {...}`

В сервисе я составил метод для получения подарочного сертификата (GiftCertificate) по тегу (Tag):
@Override
    public Set<GiftCertificateDto> findByTagName(String tagName) {
        Tag tag = tagDao.findByName(tagName)
                .orElseThrow(() -> new EntityNotFoundException(MESSAGE_ENTITY_NOT_FOUND_EXCEPTION));

        return giftCertificateDao.findByTag(tag).stream()
                .map(giftCertificate -> modelMapper.map(giftCertificate, GiftCertificateDto.class))
                .collect(Collectors.toSet());
    }


Теперь не понимаю, как объединить эти два стрима в один. Как я пробовал: сначала пытался выбросить исключение вызовом метода ` .orElseThrow()`, но это "завершающий" метод, после которого нельзя вызывать, например, `map()`.
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
return tagDao.findByName(tagName)
    .map(tag -> giftCertificateDao.findByTag(tag)
        .stream()
        .map(giftCertificate -> modelMapper.map(giftCertificate, GiftCertificateDto.class))
        .collect(Collectors.toSet()))
    .orElseThrow(() -> new EntityNotFoundException(MESSAGE_ENTITY_NOT_FOUND_EXCEPTION));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы