は、私は、Java 8のストリームに適合するようにしようとしていた。Java8ストリームでこのようなコードを書き直すことはできますか?
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;
}
が、私はコレクションはストリーム内の空であるかどうかをチェックして、問題に直面しました。私が得意な "ストリームメスト"は、次のようになります。
@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;
}
しかし、それでも私はそれが好きではありません。
を忘れてください。あなたがそれが可能かどうかを尋ねているなら、その答えがはいであることをはっきりと示しています。それを改善する方法を尋ねるなら、[Code Review](https://codereview.stackexchange.com/)に行く方が良いでしょう。 –
は 'noneMatch'または 'anyMatch'ですか? !rewardConfigs.isEmpty()&& rewardConfigs.stream()... noneMatch(...)はシーンを私に作っていません –
@ 123-xyz :) 'noneMatch'と' anyMatch'の動作は違っていますまた試みた。あなたは私の編集された答えを見ることができます、私はそれを書いた直後に 'anyMatch'ソリューションを削除しました。 OPはコレクションが空の場合にだけ 'false'を返すだけです。 –