优化代码 List<ActionExecutingParam> validActionList = actionExecutingParam.stream().filter(o -> check(o.getProgressStatus(), o.getAppMap())).collect(Collectors.toList()); List<ActionExecutingParam> unvalidActionList = actionExecutingParam.stream().filter(o -> !check(o.getProgressStatus(), o.getAppMap())).collect(Collectors.toList());
时间: 2024-02-26 21:57:26 浏览: 96
你的代码实现了将一个 List<ActionExecutingParam> 按照条件筛选成两个 List<ActionExecutingParam> 的功能,其中一个 List 存放符合条件的元素,另一个 List 存放不符合条件的元素。
不过代码中有一些可以优化的地方:
1. 可以将 `check(o.getProgressStatus(), o.getAppMap())` 的结果缓存起来,避免重复计算。
2. 可以使用 `partitioningBy` 方法来将 List 分成两个 Map,其中一个 Map 中存放符合条件的元素,另一个 Map 中存放不符合条件的元素。
下面是优化后的代码实现:
```
Map<Boolean, List<ActionExecutingParam>> partitionedMap = actionExecutingParam.stream()
.collect(Collectors.partitioningBy(o -> check(o.getProgressStatus(), o.getAppMap())));
List<ActionExecutingParam> validActionList = partitionedMap.get(true);
List<ActionExecutingParam> unvalidActionList = partitionedMap.get(false);
```
这样可以避免重复计算,并且更加简洁和易于理解。
相关问题
优化以下代码: FileMatrixVo fileMatrixVo = new FileMatrixVo(); fileMatrixVo.setId(tableName + "-" + columnName); fileMatrixVo.setCoherenceFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.ENUMERATION_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setEffectiveFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.REGEXP_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setCompleteFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.NULL_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setUniquenessFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.UNIQUENESS_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setMultiTableConsistency(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.MULTI_TABLE_ACCURACY.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setFieldLengthFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.FIELD_LENGTH_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setTimelinessFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.TIMELINESS_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList()));
可以将重复的代码抽取到一个方法中,减少代码冗余,如下:
```
private List<ErrorOutputFileVo> filterErrorOutputFiles(List<ErrorOutputFileVo> errorOutputFiles, String ruleTemplateId) {
return errorOutputFiles.stream()
.filter(errorOutputFileVo -> ruleTemplateId.equals(errorOutputFileVo.getRuleTemplateId()))
.collect(Collectors.toList());
}
...
FileMatrixVo fileMatrixVo = new FileMatrixVo();
fileMatrixVo.setId(tableName + "-" + columnName);
fileMatrixVo.setCoherenceFiles(filterErrorOutputFiles(errorOutputFiles, RuleTemplateName.ENUMERATION_CHECK.getId()));
fileMatrixVo.setEffectiveFiles(filterErrorOutputFiles(errorOutputFiles, RuleTemplateName.REGEXP_CHECK.getId()));
fileMatrixVo.setCompleteFiles(filterErrorOutputFiles(errorOutputFiles, RuleTemplateName.NULL_CHECK.getId()));
fileMatrixVo.setUniquenessFiles(filterErrorOutputFiles(errorOutputFiles, RuleTemplateName.UNIQUENESS_CHECK.getId()));
fileMatrixVo.setMultiTableConsistency(filterErrorOutputFiles(errorOutputFiles, RuleTemplateName.MULTI_TABLE_ACCURACY.getId()));
fileMatrixVo.setFieldLengthFiles(filterErrorOutputFiles(errorOutputFiles, RuleTemplateName.FIELD_LENGTH_CHECK.getId()));
fileMatrixVo.setTimelinessFiles(filterErrorOutputFiles(errorOutputFiles, RuleTemplateName.TIMELINESS_CHECK.getId()));
```
if (code.length() > 10) { sn = code.substring(code.length() - 7); // 7位序列号 style = code.substring(code.length() - 10, code.length() - 7); // 3位款式 spec = code.substring(0, code.length() - 10); // 型号 stringList.add(spec + "-" + style + "-" + sn); ExcelImportViewModel m = iv.inventoryList.stream().filter(t -> t.name.equalsIgnoreCase(spec + "-" + style)).findFirst().orElse(null); if (m != null) { m.check_inventory += 1; if (m.check_inventory == m.real_inventory) { m.status = 1; // } else if (m.check_inventory > m.real_inventory) { m.status = 2; } } }ExcelImportViewModel拿不到数据了,怎么解决
如果`ExcelImportViewModel`拿不到数据了,可能是因为数据不匹配或者数据为空。你可以检查以下几个方面:
1. 检查`iv.inventoryList`是否为空。如果为空,可能是因为没有正确初始化`inventoryList`。
2. 检查`name`字段是否正确。如果`name`字段的值与`spec + "-" + style`不匹配,可能会导致查询不到`ExcelImportViewModel`对象。
3. 检查`spec + "-" + style`是否与`ExcelImportViewModel`中的数据匹配。如果不匹配,可能会导致`ExcelImportViewModel`对象的值不正确。
你可以在代码中加入一些日志来帮助你定位问题所在。例如,在查询`ExcelImportViewModel`之前,可以打印一下`spec + "-" + style`的值,以确保其与`ExcelImportViewModel`中的数据匹配。代码示例如下:
```
// 输出日志,检查spec + "-" + style的值
Log.d("TAG", "spec + \"-\" + style: " + spec + "-" + style);
// 查询ExcelImportViewModel
ExcelImportViewModel m = iv.inventoryList.stream().filter(t -> t.name.equalsIgnoreCase(spec + "-" + style)).findFirst().orElse(null);
```
你可以根据需要对日志进行修改,使其更符合你的需求。如果你还有其他问题,可以继续向我提问。
阅读全文