if (nmAttrNameIdMap.containsKey(attrName)) { List<Integer> attrIds = boardMode2AttributeIdsMap.getOrDefault(String.valueOf(boardMode), new ArrayList<>()); attrIds.add(nmAttrNameIdMap.get(attrName)); boardMode2AttributeIdsMap.put(String.valueOf(boardMode), attrIds); }
时间: 2024-03-20 19:39:20 浏览: 15
根据您提供的代码,我认为可以进行如下优化:
1. 使用Java8的新特性,如Lambda表达式和Optional类,使代码更加简洁易读。
2. 使用更有意义的变量名,以提高代码的可读性。
3. 使用局部变量存储重复使用的值,以提高代码的效率。
优化后的代码如下所示:
```java
if (nmAttrNameIdMap.containsKey(attributeName)) {
List<Integer> attributeIds = boardModeToAttributeIdsMap
.computeIfAbsent(String.valueOf(boardMode), k -> new ArrayList<>());
attributeIds.add(nmAttrNameIdMap.get(attributeName));
}
```
以上代码的优化点如下:
1. 使用了`computeIfAbsent()`方法来避免了使用`getOrDefault()`方法时需要手动创建一个空的`ArrayList`对象的问题。
2. 使用了`attributeName`代替了原代码中的`attrName`,以更好地表达变量的含义。
3. 使用了`attributeIds`代替了原代码中的`attrIds`,以更好地表达变量的含义。
4. 使用了`computeIfAbsent()`方法,使代码更加简洁易读。
希望以上优化对您有所帮助。
相关问题
Set<Integer> keySet = map1.keySet(); Iterator<Integer> it=keySet.iterator(); int res=0; while(it.hasNext()){ int key=it.next(); res+=map1.get(key)*map2.get(key); }优化这个代码
对于上述代码,可以通过使用增强的 for 循环来遍历 Map 中的键值对,从而简化代码,优化性能。重写的代码如下:
```java
int res = 0;
for (Map.Entry<Integer, Integer> entry : map1.entrySet()) {
int key = entry.getKey();
int value = entry.getValue();
if (map2.containsKey(key)) {
res += value * map2.get(key);
}
}
```
上述代码中,使用 `Map.entrySet()` 方法获取 Map 集合中所有键值对的集合,然后使用增强的 for 循环遍历每个键值对,从而不再需要使用 `Set<Integer> keySet = map1.keySet();` 和 `Iterator<Integer> it=keySet.iterator();`。在计算乘积之和时,使用 `if (map2.containsKey(key))` 来判断 map2 是否包含 map1 中的键,以避免空指针异常。
优化 /// <summary> /// 树形数据转化 /// </summary> /// <param name="list">数据</param> /// <param name="parentId">父节点ID</param> /// <returns></returns> public static List<TreeModel> ToTree(this List<TreeModel> list,string parentId = "") { Dictionary<string, List<TreeModel>> childrenMap = new Dictionary<string, List<TreeModel>>(); Dictionary<string, TreeModel> parentMap = new Dictionary<string, TreeModel>(); List<TreeModel> res = new List<TreeModel>(); //首先按照 foreach (var node in list) { node.hasChildren = false; node.complete = true; // 注册子节点映射表 if (!childrenMap.ContainsKey(node.parentId)) { childrenMap.Add(node.parentId, new List<TreeModel>()); } else if (parentMap.ContainsKey(node.parentId)) { parentMap[node.parentId].hasChildren = true; } childrenMap[node.parentId].Add(node); // 注册父节点映射节点表 parentMap.Add(node.id, node); // 查找自己的子节点 if (!childrenMap.ContainsKey(node.id)) { childrenMap.Add(node.id, new List<TreeModel>()); } else { node.hasChildren = true; } node.ChildNodes = childrenMap[node.id]; } if (string.IsNullOrEmpty(parentId)) { // 获取祖先数据列表 foreach (var item in childrenMap) { if (!parentMap.ContainsKey(item.Key)) { res.AddRange(item.Value); } } } else { if (childrenMap.ContainsKey(parentId)) { return childrenMap[parentId]; } else { return new List<TreeModel>(); } } return res; }
这段代码主要是将一个列表形式的树形结构数据转换为树形结构的对象,实现了以下功能:
1. 将树形结构数据按照父子节点关系组织为一个字典,方便后续处理。
2. 将每个节点注册到父节点和子节点的映射表中。
3. 根据父节点和子节点的映射表,将每个节点的子节点列表设置为正确的值。
4. 获取指定父节点下的所有子节点列表。
但是,这段代码的可读性和可维护性都不太好,可以进行如下优化:
1. 将一些变量和逻辑进行重构,使得代码更加清晰和易于理解。
2. 使用 LINQ 和 Lambda 表达式替换 foreach 循环,使得代码更加简洁。
重构后的代码如下:
```csharp
public static List<TreeModel> ToTree(this List<TreeModel> list, string parentId = "")
{
// 将节点按照 ID 分组,方便后续处理
var nodesById = list.ToDictionary(node => node.id);
// 将节点按照 parentId 分组,方便后续处理
var nodesByParentId = list.GroupBy(node => node.parentId);
// 设置每个节点的子节点列表
foreach (var group in nodesByParentId)
{
var parentId = group.Key;
var parent = nodesById.GetValueOrDefault(parentId);
if (parent != null)
{
parent.ChildNodes = group.ToList();
parent.hasChildren = true;
}
}
// 获取指定父节点下的所有子节点列表
if (string.IsNullOrEmpty(parentId))
{
return nodesById.Values
.Where(node => !nodesById.ContainsKey(node.parentId))
.ToList();
}
else
{
var parent = nodesById.GetValueOrDefault(parentId);
return parent?.ChildNodes ?? new List<TreeModel>();
}
}
```
经过优化后的代码,更加清晰简洁,易于理解和维护。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![js](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)