圈复杂度:需要帮助优化java代码吗
需要帮助优化这个java代码。圈复杂度是20,需要15圈复杂度:需要帮助优化java代码吗,java,cyclomatic-complexity,Java,Cyclomatic Complexity,需要帮助优化这个java代码。圈复杂度是20,需要15 private static void replaceNodeProperties(HashMap configNodeProperties, JSONArray esdNodepropertiesList) { HashMap replaceConfigNodePropRules = (HashMap) configNodeProperties.get("replace"); if (replac
private static void replaceNodeProperties(HashMap configNodeProperties, JSONArray esdNodepropertiesList)
{
HashMap replaceConfigNodePropRules = (HashMap) configNodeProperties.get("replace");
if (replaceConfigNodePropRules != null) {
for (Object replaceConfigNodeProp : replaceConfigNodePropRules.keySet()) {
for (int j = 0; j < esdNodepropertiesList.size(); j++) {
JSONObject esdNodePropObj = (JSONObject) esdNodepropertiesList.get(j);
if (esdNodePropObj.get("name").toString().contains("::")) {
esdNodePropObj.put("name", esdNodePropObj.get("name").toString().split("::")[1]);
}
if (esdNodePropObj.get("name").equals(replaceConfigNodeProp)) {
if (replaceConfigNodeProp.equals("resourceType")) {
esdNodepropertiesList.remove(j);
ArrayList replaceNodePropList = (ArrayList) replaceConfigNodePropRules.get(replaceConfigNodeProp);
esdNodepropertiesList.addAll(replaceNodePropList);
} else if (replaceConfigNodeProp.equals("comments"))
esdNodePropObj.put("name", replaceConfigNodePropRules.get(replaceConfigNodeProp));
break;
}
}
}
}
}
私有静态void replaceNodeProperties(HashMap configNodeProperties,JSONArray EsdNodeProperties列表)
{
HashMap ReplaceConfigNodeProperties=(HashMap)configNodeProperties.get(“替换”);
if(replaceConfigNodeProRules!=null){
对于(对象replaceConfigNodeProp:replaceConfigNodeProRules.keySet()){
对于(int j=0;j
有几种重构方法可以降低代码的圈复杂度。无论使用何种估计方法,关键思想是减少通过代码的线性独立路径的数量
一般来说,您可以通过以下方式实现:
- 通过使用early return:在条件允许时退出方法,而不等待单个退出点
- 避免不需要的
语句else
- 避免嵌套循环。在某些情况下,您可以创建一个实现所需功能的新方法
- 通常使用较小的方法。这不仅降低了代码的圈复杂度,而且使测试代码更容易
replaceConfigNodeProRules==null
时提前退出最后,请记住,这并不总是能够降低复杂性。以下是一些自然会有点复杂的函数-验证用户输入或解析就是例子。您使用的圈复杂度算法是什么(例如McCabe、Prater)?您需要降低其复杂度还是您的IDE只是将其标记为复杂?我想我会尝试做的第一件事是将内部
for
循环提取到它自己的方法中。可以通过为for循环创建两个小方法来解决此问题。