首页 > 解决方案 > 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循环?

标签: javajava-stream

解决方案


您尝试将 a 收集Stream<Set<String>>List<String>. 这显然是类型不匹配。您需要在Stream<String>使用.flatmap(Set::stream).


推荐阅读