Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java流映射T->?T:列表<;T>;_Java_Java Stream - Fatal编程技术网

Java流映射T->?T:列表<;T>;

Java流映射T->?T:列表<;T>;,java,java-stream,Java,Java Stream,我是java新手,喜欢流API。 我得到了这个循环: List<FileTree> expanded = new ArrayList<>(); for(FileTree item : tree){ if(item.getType().equals("tree")){ expanded.addAll(getTreeOfSubStudPackage(item.getName())); } else{ expanded.a

我是java新手,喜欢流API。 我得到了这个循环:

List<FileTree> expanded = new ArrayList<>();
for(FileTree item : tree){
    if(item.getType().equals("tree")){
        expanded.addAll(getTreeOfSubStudPackage(item.getName()));
    }
    else{
        expanded.add(item);
    }
}
它编译得很好。但这是推荐的吗?我有没有实施过禁飞,或者有没有更好的方法? 最后但并非最不重要的一点是:
.stream()
中是否存在使此改进毫无价值的开销

附录
列出getTreeOfSubStudPackage(…){
//...
}
类文件树{
私有字符串名称;
私有字符串类型;
私有字符串模式;
私有字符串id;
//…公众的接受者和接受者。。。
}

您需要执行
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());

你确定这个代码有效吗?您的lambda表达式在if和else子句中返回不同的类型。似乎您正在查找
.flatMap
,但您的问题有点不清楚,所以很难说。仅供参考,您的流尝试会生成一个
列表
,其中包含
文件树
列表
的混合体。我从IntelliJ学到的技巧:
Collections.singletonList()
@Marko Topolnik:准备学习Java 9中的
List.of(…)
。但是在这里,
array.asList
singletonList
,与整个中间
List
步骤一样过时。只需将
map(…).flatMap(…)
替换为单个
.flatMap(item->item.getType().equals(“树”)?getTreeOfSubStudPackage(item.getName()).stream():stream.of(item))
List<FileTree> getTreeOfSubStudPackage(...){
    //...
}

class FileTree {
    private String name;
    private String type;
    private String mode;
    private String id;
    //... Public Getter And Setter ...
}
    tree.stream()
        .map(item -> item.getType().equals("tree") ? getTreeOfSubStudPackage(item.getName()) : Arrays.asList(item))
        .flatMap(Collection::stream)
        .collect(Collectors.toList());