我是java新手,喜欢Stream API。 我得到了这个循环:
List<FileTree> expanded = new ArrayList<>();
for(FileTree item : tree){
if(item.getType().equals("tree")){
expanded.addAll(getTreeOfSubStudPackage(item.getName()));
}
else{
expanded.add(item);
}
}
我想知道这是否可以转换为整洁的流。我的第一个猜测如下:
tree.stream().map(fileTree -> {
if(fileTree.getType().equals("tree")){
return getTreeOfSubStudPackage(fileTree.getName());
}
else{
return fileTree;
}
}).collect(Collectors.toList());
编译好。但这是推荐的吗,我是否实施过No-Go或者是否有更好的方法?
最后但并非最不重要的是:.stream()
中是否有开销会使这种改善变得毫无价值?
List<FileTree> getTreeOfSubStudPackage(...){
//...
}
class FileTree {
private String name;
private String type;
private String mode;
private String id;
//... Public Getter And Setter ...
}
答案 0 :(得分:2)
您需要map
然后flatMap
。
Arrays.asList(item)
是要将List
中的元素添加到下一个flatMap
tree.stream()
.map(item -> item.getType().equals("tree") ? getTreeOfSubStudPackage(item.getName()) : Arrays.asList(item))
.flatMap(Collection::stream)
.collect(Collectors.toList());