我想用三元运算符替换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
中;这是不必要的(。