comments.setChildren(list.stream().filter(c -> comments.getId().equals(c.getPid())).collect(Collectors.toList()));详细解释这段代码
时间: 2024-05-20 16:11:44 浏览: 164
这段代码使用了 Java 8 中的 Stream API,其作用是给一个父评论(`comments`)设置它的所有子评论(`children`)。具体解释如下:
1. `list.stream()`:将 `list` 转换成一个流(Stream)对象。
2. `.filter(c -> comments.getId().equals(c.getPid()))`:对流中的元素进行过滤,只保留 `pid` 等于父评论 ID 的评论。
3. `.collect(Collectors.toList())`:将过滤后的评论收集到一个新的 List 中。
4. `comments.setChildren(...)`:将步骤 3 中收集到的子评论列表设置到父评论对象中的 `children` 属性中。
简单来说,这段代码就是使用 Stream API 对评论列表进行过滤,找到所有属于当前评论的子评论并将它们设置为当前评论的子节点。
相关问题
list.stream().filter(c -> comments.getId().equals(c.getPid())).collect(Collectors.toList())
这段代码是使用 Java 8 中的 Stream API 对一个 List 进行过滤。具体来说,这段代码的作用是:从 List 中筛选出所有满足条件的元素,条件是该元素的 pid 属性与 comments 对象的 id 属性相等。最后,将所有满足条件的元素收集到一个新的 List 中并返回。其中,filter() 方法表示筛选,collect() 方法表示收集,而 Collectors.toList() 表示将筛选结果转化为一个 List。
优化以下代码: 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()));
```
阅读全文
相关推荐

















