首页 > 解决方案 > 多个 If 语句减少

问题描述

我正在寻找一些帮助来清理下面的代码并减少行数。如果get返回null,有没有办法不设置任何东西?

            if (map.get("cpn_rate") != null) {
                collateral.setCoupon(new BigDecimal(map.get("cpn_rate")));
            }
            if (map.get("Price") != null) {
                collateral.setPrice(new BigDecimal(map.get("Price")));
            }
            if (map.get("Par") != null) {
                collateral.setPar(new BigDecimal(map.get("Par")));
            }
            if (map.get("mkt_val") != null) {
                collateral.setMarketValue(new BigDecimal(map.get("mkt_val")));
            }
            if (map.get("Accrued Intr") != null) {
                collateral.setAccurInterest(new BigDecimal(map.get("Accrued Intr")));
            }
            if (map.get("Total Market Value") != null) {
                collateral.setTotMktValue(new BigDecimal(map.get("Total Market Value")));
            }

标签: java

解决方案


对“我能让这个更简洁/简洁”这一公开问题的简单答案是“不”。在使这个更简洁或简洁的过程中,你不会真正得到你想要的东西,也不会computeIfPresent真正给你想要的东西保持你的代码可读。

问题是,当您从地图中检索密钥时,您将其放在collateral实例中的不同字段中。这意味着诸如在地图上循环之类的琐碎解决方案将无法满足,因为如果不深入思考,您将无法获得需要映射到的确切字段。

您在这里拥有的代码虽然很冗长,但对于任何其他维护人员来说都是完全可读和合理的,以了解正在发生的事情。我认为没有改变它的动机。


推荐阅读