.collect(toList()); .collect(Collectors.toList());两者有什么不同
时间: 2024-09-07 14:01:19 浏览: 82
在Java 8及更高版本中,`Collectors.toList()` 和 `collect(toList())` 都是用来将集合转换为列表的方法,但它们的位置稍有不同。
`collect(toList())` 是对 `Stream` 或其他可以进行收集操作的对象直接应用的一个简写形式。当你有一个流(`Stream`),并且想要将其转换为列表,可以直接调用这个方法:
```java
List<String> list = streamOfElements.collect(toList());
```
而 `Collectors.toList()` 则是一个收集器(Collector)函数,它是 Java 8 中引入的一种强大的工具,用于配置如何处理数据流。在这种情况下,它作为一个中间步骤被应用于 `stream.map()` 或类似的操作之后:
```java
List<String> list = streamOfElements.map某种映射操作)
.collect(Collectors.toList());
```
这里,`.map()` 进行预处理,然后 `.collect(Collectors.toList())` 完成列表的构建。
总结来说,两者的区别在于:
- `collect(toList())` 直接作用于流上;
- `Collectors.toList()` 是作为 Collector 的一部分,通常与其他操作组合使用。
相关问题
List<RsysMenu> rootMenus = list.stream().filter(item -> "M".equals(item.getParentId())).sorted().collect(Collectors.toList()); List<RsysMenu> rootMenus = list.stream().filter(item -> "M".equals(item.getParentId())).sorted().collect(Collectors.toList()); List<RsysMenu> rootMenus = list.stream().filter(item -> "M".equals(item.getParentId())).sorted().collect(Collectors.toList()); List<RsysMenu> rootMenus = list.stream().filter(item -> "M".equals(item.getParentId())).sorted().collect(Collectors.toList()); List<RsysMenu> rootMenus = list.stream().filter(item -> "M".equals(item.getParentId())).sorted().collect(Collectors.toList());
这段代码是一个Java代码片段,它的作用是从一个列表中过滤出所有父节点为"M"的菜单项,并按照一定规则进行排序,最后将结果收集到一个新的列表中。
首先,通过使用`stream()`方法将列表转换为流,然后使用`filter()`方法过滤出父节点为"M"的菜单项。接着,使用`sorted()`方法对菜单项进行排序。最后,使用`collect()`方法将过滤和排序后的菜单项收集到一个新的列表中。
请注意,代码中多次出现的重复行是输入错误,应该删除多余的行。正确的代码应该是这样的:
```java
List<RsysMenu> rootMenus = list.stream()
.filter(item -> "M".equals(item.getParentId()))
.sorted()
.collect(Collectors.toList());
```
这样,你就可以得到一个包含所有父节点为"M"的菜单项,并按照排序规则排列的列表。
优化以下代码: 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()));
```
阅读全文