java - Java:用流替换 forEach 循环
问题描述
在以下方法中,我想用流替换 forEach 循环。
protected Set<String> getSelectedPaths(final CheckModel<TreeItem<String>> checkModel, final LazyTreeItem root) {
final Set<String> ceckedList = new HashSet<>();
final List<TreeItem<String>> children = root.getChildren();
final List<LazyTreeItem> lazyChildren = children.stream().map((item -> (LazyTreeItem) item))
.collect(Collectors.toList());
final List<String> selectedChildren = new ArrayList<>();
children.forEach(child -> selectedChildren.addAll(getSelectedPaths(checkModel, (LazyTreeItem) child)));
/**
* do sth with checkedList
*/
return checkedList
线条
final List<String> selectedChildren = new ArrayList<>();
children.forEach(child -> selectedChildren.addAll(getSelectedPaths(checkModel, (LazyTreeItem) child)));
应替换为流。我试过了
final List<String> selectedChildren = children.stream().map(child->getSelectedPaths(checkModel, (LazyTreeItem) child)).collect(Collectors.toList());
但编译器错误“
Type mismatch: cannot convert from List<Set<String>> to List<String>"
被抛出。有没有机会用流替换这个forEach循环?
解决方案
您尝试将 a 收集Stream<Set<String>>
到List<String>
. 这显然是类型不匹配。您需要在Stream<String>
使用.flatmap(Set::stream)
.
推荐阅读
- java - 了解pdf中的图形(变换矩阵cm)坐标(图形的解析位置)系统?
- java - 正则表达式需要一个字母和一个非字母并且没有空格
- java - 如何逐点获取地图中的值?
- joomla - Mod_security - 需要帮助
- android - Android 以编程方式使用 ConstraintLayout 添加 ImageView
- javascript - 引导和反应,在单选按钮上分配 .active 类
- android - 使用 Kotlin 的片段中的 runOnUiThread() 方法
- google-apis-explorer - 如何使用 REST API 将 Bitbucket 存储库连接到 Google 云源存储库
- r - 使用正确的顶点名称可视化图形(igraph for r)
- android - iOS 中的 SHA 加密