替换forEach语句下的if条件



我想用三元运算符替换if条件。

Map<String, Object> resultMap = new HashMap<>();    
reasons.stream().forEach(reason -> {                    
if(reason.isNotChargable()) {
resultMap.put("reason1", reason);
} else {
resultMap.put("reason2", reason);
}
});

其中原因是一个列表对象。

for-each中的三进制的一个更好的替代方案是简单地从Stream创建Map,但也使用三进制来确定键。我假设对象是Reason,因为它没有被包含在问题中。

支持@Naman在收集多个相等的密钥时处理冲突。这将假定现有值,而不是抛出IllegalStateException。

Map<String, Reason> results = reasons.stream()
.collect(Collectors.toMap(r -> r.isNotChargable() ? "reason1" : "reason2", Function.identity(), (existing, next) -> existing);

你可以试试这个:

String key = reason.isNotChargable() ? "reason1" : "reason2";
resultMap.put(key , reason);

将其替换为循环。根本没有理由使用forEach

for (ReasonType reason : reasons) {
resultMap.put(reason.isNotChargeable() ? "reason1" : "reason2", reason);
}

(但是,您可以将这个resultMap.put放入forEach中;这是不必要的(。

最新更新