private Set<String> set = new HashSet<>()
时间: 2023-12-16 22:05:22 浏览: 111
这是一个Java中的变量声明语句,声明了一个名为"set"的私有变量,类型为Set<String>,并用HashSet进行了初始化。Set是Java中的一个接口,表示一组不重复的元素,而HashSet是实现了Set接口的类,可以存储不重复的元素,并且具有较快的查找速度。在这段代码中,Set<String>指定了存储的元素类型为String。
相关问题
private static List<String> matchDisNames(List<String> disNames,List<String> keyWords){ List<String> result = new ArrayList<>(); for (String disName:disNames){ if (StringUtils.isNotBlank(disName)){ for (String kw:keyWords){ if (kw!=null&&disName.toLowerCase().contains(kw.trim().toLowerCase())){ result.add(disName); break; } } } } return result; } bug分析
该方法的作用是匹配一组疾病名称(disNames)中包含给定关键词(keyWords)的名称,并返回匹配结果。但是,该方法可能存在以下几个问题:
1. 参数名不够明确:方法的参数名 disNames 和 keyWords 不是很清晰,建议改为 diseaseNames 和 keywords,以提高代码可读性。
2. 双重判空:在方法内部使用了 StringUtils.isNotBlank() 方法判断 disName 是否为空,但同时在内部循环中又使用了 kw!=null 进行非空判断。这种双重判空的方式不是很优雅,可以只使用 StringUtils.isNotBlank() 进行判断。
3. 多次字符串转换:在内部循环中,每次都要对 disName 和 kw 进行字符串大小写转换,这样会造成不必要的性能开销。建议在方法外部先将关键词转换为小写,再进行循环匹配。
4. 可能存在重复结果:如果某个疾病名称同时包含多个关键词,则会被添加多次到结果列表中。可以使用 Set 来去除重复结果。
综上所述,可以对该方法进行如下改进:
```
private static List<String> matchDiseaseNames(List<String> diseaseNames, List<String> keywords) {
List<String> result = new ArrayList<>();
Set<String> lowerKeywords = new HashSet<>();
for (String keyword : keywords) {
if (StringUtils.isNotBlank(keyword)) {
lowerKeywords.add(keyword.trim().toLowerCase());
}
}
for (String diseaseName : diseaseNames) {
if (StringUtils.isNotBlank(diseaseName)) {
String lowerName = diseaseName.trim().toLowerCase();
for (String kw : lowerKeywords) {
if (lowerName.contains(kw)) {
result.add(diseaseName);
break;
}
}
}
}
return new ArrayList<>(new HashSet<>(result));
}
```
优化 private void addReferencedKpi(List<AnalysisTableDto> 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); } }); } // 装饰引用kpi for (AnalysisTableDto simulationTableDto : list) { String simTableName = simulationTableDto.getTableName(); for (SimulationColumnDto column : simulationTableDto.getColumns()) { String simTitle = column.getTitle(); if (!tableColumnWithCodeListMap.containsKey(simTableName) || !tableColumnWithCodeListMap.get(simTableName).containsKey(simTitle)) { continue; } List<String> referencedCodeList = tableColumnWithCodeListMap.get(simTableName).get(simTitle); column.setReferencedKpis(referencedCodeList); } } }
这段代码的主要功能是将一个数据结构进行转换,并将转换后的结果装饰到数据模型中。下面是一些优化建议:
1. 使用stream API来简化代码,提高可读性和可维护性。
2. 使用Optional类来避免对null进行判断。
3. 使用更具有描述性的变量名来提高可读性。
4. 将List转换为Set来提高查找效率。
下面是优化后的代码:
```
private void addReferencedKpi(List<AnalysisTableDto> tableDtoList, List<String> codeList, List<Map<String, List<String>>> referencedList) {
if (CollectionUtils.isEmpty(tableDtoList) || CollectionUtils.isEmpty(codeList) || CollectionUtils.isEmpty(referencedList)) {
return;
}
Map<String, Map<String, Set<String>>> tableColumnWithCodeMap = new HashMap<>();
IntStream.range(0, referencedList.size())
.filter(i -> MapUtils.isNotEmpty(referencedList.get(i)))
.forEach(i -> {
String code = codeList.get(i);
referencedList.get(i).forEach((table, columns) -> {
Map<String, Set<String>> columnWithCodeMap = tableColumnWithCodeMap.computeIfAbsent(table, k -> new HashMap<>());
columns.forEach(column -> columnWithCodeMap.computeIfAbsent(column, k -> new HashSet<>()).add(code));
});
});
tableDtoList.forEach(tableDto -> {
String tableName = tableDto.getTableName();
tableDto.getColumns().stream()
.filter(column -> tableColumnWithCodeMap.containsKey(tableName) && tableColumnWithCodeMap.get(tableName).containsKey(column.getTitle()))
.forEach(column -> column.setReferencedKpis(tableColumnWithCodeMap.get(tableName).get(column.getTitle())));
});
}
```
阅读全文