首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何降低声纳对以下代码的认知复杂度?

如何降低声纳对以下代码的认知复杂度?
EN

Stack Overflow用户
提问于 2021-08-04 15:11:52
回答 3查看 1.9K关注 0票数 0

下面是我的代码,Sonar在抱怨。要求制作15,现在是19。重构该方法,将其认知复杂度从19降低到允许的15。我试过了,但这不管用。并将transactionId作为RequestParam。是否有eclipse工具来提取这个,或者我们需要手动进行。

代码语言:javascript
复制
@GetMapping(value = "display",produces = APPLICATION_JSON_VALUE)
    @ResponseBody
    public List<RspNotification> display(@RequestParam(name = Constants.TRANSACTION_ID) final String transactionId)
    {
        List<RspNotification> list = new ArrayList<>();
        if (manageProductOrderCISStore.get(transactionId) != null)
        {
            list.add(manageProductOrderCISStore.get(transactionId));
        }
        else if (manageAppointmentWWMStore.get(transactionId) != null)
        {
            list.add(manageAppointmentWWMStore.get(transactionId));
        }
        else if (manageAppointmentHWMStore.get(transactionId) != null)
        {
            list.add(manageAppointmentHWMStore.get(transactionId));
        }
        else if (manageAppointmentUnifyStore.get(transactionId) != null)
        {
            list.add(manageAppointmentUnifyStore.get(transactionId));
        }
        else if (manageAppointmentUnifyXmlStore.get(transactionId) != null)
        {
            list.add(manageAppointmentUnifyXmlStore.get(transactionId));
        }
        else if (manageProductOrderFLSStore.get(transactionId) != null)
        {
            list.add(manageProductOrderFLSStore.get(transactionId));
        }
        else if (manageProductOrderHFSStore.get(transactionId) != null)
        {
            list.add(manageProductOrderHFSStore.get(transactionId));
        }
        else if (fulfilmentQuoteEEStore.get(transactionId) != null)
        {
            list.add(fulfilmentQuoteEEStore.get(transactionId));
        }
        else if (manageInventoryHFSStore.get(transactionId) != null)
        {
            list.add(manageInventoryHFSStore.get(transactionId));
        }
        else if (manageInventoryFLSStore.get(transactionId) != null)
        {
            list.add(manageInventoryFLSStore.get(transactionId));
        }
        else if (manageBillingDocumentStore.get(transactionId) != null)
        {
            list.add(manageBillingDocumentStore.get(transactionId));
        }
        else if (serviceHealthStore.get(transactionId) != null)
        {
            list.add(serviceHealthStore.get(transactionId));
        }
        else if (fulfilmentOrderEEStore.get(transactionId) != null)
        {
            list.add(fulfilmentOrderEEStore.get(transactionId));
        }
        else if (manageWorkOrderUnifyStore.get(transactionId) != null)
        {
            list.add(manageWorkOrderUnifyStore.get(transactionId));
        }
        else if (manageDiagnosticAssuranceStore.get(transactionId) != null)
        {
            list.add(manageDiagnosticAssuranceStore.get(transactionId));
        }
        else if (materialsSupplyUnifyStore.get(transactionId) != null)
        {
            list.add(materialsSupplyUnifyStore.get(transactionId));
        }
        ///////// more if statement

        return list;
    }

任何帮助都是非常感谢的,而枚举是行不通的。

EN

Stack Overflow用户

回答已采纳

发布于 2021-08-04 15:19:32

做一个地图的列表并循环它们。

代码语言:javascript
复制
List<Map<String, RspNotification>> maps = Arrays.asList(
    manageProductOrderCISStore,
    manageAppointmentWWMStore,
    manageAppointmentHWMStore,
    manageAppointmentUnifyStore
    //the rest
);

List<RspNotification> list = new ArrayList<>();
for (Map<String, RspNotification> map : maps) {
    RspNotification notification = map.get(transactionId);
    if (notification != null) {
        list.add(notification);
        return;
    }
}
return list;

您可以进一步简化为

代码语言:javascript
复制
return Stream.of(
        manageProductOrderCISStore,
        manageAppointmentWWMStore,
        manageAppointmentHWMStore,
        manageAppointmentUnifyStore
        //the rest
    )
    .map(map -> map.get(transactionId))
    .filter(Objects::nonNull)
    .findFirst()
    .map(Collections::singletonList)
    .orElse(Collections.emptyList());
票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68653763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档