代码优化 res.add(CollectionUtils.isEmpty(typeMap.get(type)) ? 0 : typeMap.get(type).size());
时间: 2024-05-29 22:13:33 浏览: 123
这段代码的意思是:如果typeMap中类型为type的元素为空,则向res中加入0,否则将typeMap中类型为type的元素的大小加入到res中。这段代码可以进行一些优化。首先,可以将CollectionUtils.isEmpty(typeMap.get(type)) ? 0 : typeMap.get(type).size()提取为一个局部变量,以提高代码的可读性和可维护性。其次,可以使用Java 8的Optional类来简化代码,如下所示:
int size = Optional.ofNullable(typeMap.get(type)).map(Collection::size).orElse(0);
res.add(size);
这段代码与上面的代码实现的功能是相同的,但使用了Java 8的Lambda表达式和Optional类进行改写,可以让代码更加简洁和优雅。
相关问题
优化这段代码 Map<String, List<AlarmAnalyseVO>> alarmAnalyseMap = new HashMap<>(); List<AlarmAnalyseVO> alarmAnalyseVOS = alarmAnalyseMap.get(typeCode); if (CollectionUtils.isEmpty(alarmAnalyseVOS)) { List<AlarmAnalyseVO> objects = new ArrayList<>(); objects.add(v); alarmAnalyseMap.put(typeCode, objects); } else { alarmAnalyseVOS.add(v); }
这段代码的目的是将一个AlarmAnalyseVO对象放入以typeCode为key的List中,如果不存在对应的List则创建一个新的List,如果存在则将AlarmAnalyseVO对象添加到对应的List中。以下是一些优化建议:
1.使用computeIfAbsent方法来避免get和put操作的重复调用。
2.使用ArrayList的构造方法指定初始容量,避免频繁扩容。
3.使用diamond operator来简化泛型类型的声明。
4.使用isEmpty方法来判断List是否为空,避免使用size()==0的方式。
优化后的代码如下所示:
Map<String, List<AlarmAnalyseVO>> alarmAnalyseMap = new HashMap<>();
alarmAnalyseMap.computeIfAbsent(typeCode, k -> new ArrayList<>(1)).add(v);
优化 private void addReferencedKpi(List<SimulationTableDto> list, List<String> codeList, List<Map<String, List<String>>> referencedList) { if (CollectionUtils.isEmpty(list) || CollectionUtils.isEmpty(codeList) || CollectionUtils.isEmpty(referencedList)) { return; } // 转换结构 key1-table key2-column value-codeList Map<String, Map<String, List<String>>> tableColumnWithCodeListMap = Maps.newHashMap(); int size = referencedList.size(); for (int i = 0; i < size; i++) { String code = codeList.get(i); Map<String, List<String>> referencedPerMap = referencedList.get(i); if (MapUtils.isEmpty(referencedPerMap)) { continue; } referencedPerMap.forEach((table, columns) -> { tableColumnWithCodeListMap.putIfAbsent(table, Maps.newHashMap()); for (String column : columns) { tableColumnWithCodeListMap.get(table).putIfAbsent(column, Lists.newArrayList()); tableColumnWithCodeListMap.get(table).get(column).add(code); } }); } for (SimulationTableDto simulationTableDto : list) { String simTableName = simulationTableDto.getTableName(); String simTitle = simulationTableDto.getColumn().getTitle(); if (!tableColumnWithCodeListMap.containsKey(simTableName) || !tableColumnWithCodeListMap.get(simTableName).containsKey(simTitle)) { continue; } List<String> referencedCodeList = tableColumnWithCodeListMap.get(simTableName).get(simTitle); simulationTableDto.getColumn().setReferencedKpis(referencedCodeList); } }
可以尝试优化一下代码结构,减少嵌套层数,使得代码更加易读和易维护。例如可以将转换结构的代码抽取成一个单独的方法,用于处理每个 referencedPerMap 中的数据,并返回转换后的表格和列名以及对应的 codeList 的 Map 对象。同时,可以考虑使用 Java 8 的 Stream API,更加简洁地实现循环操作。修改后的代码如下:
```
private void addReferencedKpi(List<SimulationTableDto> list, List<String> codeList, List<Map<String, List<String>>> referencedList) {
if (CollectionUtils.isEmpty(list) || CollectionUtils.isEmpty(codeList) || CollectionUtils.isEmpty(referencedList)) {
return;
}
// 转换结构 key1-table key2-column value-codeList
Map<String, Map<String, List<String>>> tableColumnWithCodeListMap = new HashMap<>();
referencedList.forEach(referencedPerMap -> {
if (MapUtils.isEmpty(referencedPerMap)) {
return;
}
referencedPerMap.forEach((table, columns) -> {
tableColumnWithCodeListMap.computeIfAbsent(table, k -> new HashMap<>());
columns.forEach(column -> tableColumnWithCodeListMap.get(table).computeIfAbsent(column, k -> new ArrayList<>()).addAll(codeList));
});
});
list.forEach(simulationTableDto -> {
String simTableName = simulationTableDto.getTableName();
String simTitle = simulationTableDto.getColumn().getTitle();
tableColumnWithCodeListMap.computeIfPresent(simTableName, (table, columnMap) -> {
if (columnMap.containsKey(simTitle)) {
simulationTableDto.getColumn().setReferencedKpis(columnMap.get(simTitle));
}
return columnMap;
});
});
}
```
阅读全文