多个 If 语句缩减

and*_*onc 4 java

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

            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")));
            }
Run Code Online (Sandbox Code Playgroud)

Mak*_*oto 8

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

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

您这里的代码虽然冗长,但对于任何其他维护者来说都是完全可读且合理的,可以理解正在发生的事情。我看不到改变它的动力。