Is it possible to rewrite such code in Java8 streams?

Viewed 123

I was trying to adapt it to Java 8 streams:

public boolean isProcessionRestricted(CommonMessage message) {
    if (message.getClass() == BonusMessage.class) {
        log.debug("Staring validating BonusMessage: '{}'", message);
        BonusMessage bonusMessage = (BonusMessage) message;
        Optional<BonusTriggerConfig> config = bonusTriggerConfigRepository.getCached();
        if (config.isPresent()) {
            BonusTriggerConfig bonusTriggerConfig = config.get();
            List<BonusRewardConfig> rewardConfigs = bonusTriggerConfig.getRewardConfigs();
            if (!rewardConfigs.isEmpty()) {
                return rewardConfigs.stream()
                        .map(BonusRewardConfig::getBonusTypeId)
                        .noneMatch(bonusTypeId -> bonusTypeId == bonusMessage.getBonusTypeId());
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
    return false;
}

but I faced the problem with checking if collection is empty in streams. The "streammest" thing which I get looks like this:

@Override
public boolean isProcessionRestricted(CommonMessage message) {
    if (message.getClass() == BonusMessage.class) {
        log.debug("Staring validating BonusMessage: '{}'", message);
        BonusMessage bonusMessage = (BonusMessage) message;
        return bonusTriggerConfigRepository.getCached()
                .map(bonusTriggerConfig -> {
                    List<BonusRewardConfig> rewardConfigs = bonusTriggerConfig.getRewardConfigs();
                    return !rewardConfigs.isEmpty() && rewardConfigs.stream()
                            .map(BonusRewardConfig::getBonusTypeId)
                            .noneMatch(bonusTypeId -> bonusTypeId == bonusMessage.getBonusTypeId());
                }).orElse(false);
    }
    return false;
}

but still I don't like it.

2 Answers
Related