Java 有没有一种方法可以将流的结果转换为数组并遍历数组元素?
我创建了一个Java 有没有一种方法可以将流的结果转换为数组并遍历数组元素?,java,arrays,stream,java-stream,Java,Arrays,Stream,Java Stream,我创建了一个流,以递归方式运行大量文件和文件夹。我需要将流的结果转换为数组,并遍历数组的结果 我对以下代码有问题: try (Stream<Path> stream = Files.walk(start, Integer.MAX_VALUE)) { List<String> collect = stream .stream().map(x->x.getName()) .filter(s -> s.
流
,以递归方式运行大量文件和文件夹。我需要将流的结果
转换为数组
,并遍历数组
的结果
我对以下代码有问题:
try (Stream<Path> stream = Files.walk(start, Integer.MAX_VALUE)) {
List<String> collect = stream
.stream().map(x->x.getName())
.filter(s -> s.toString().endsWith(".txt"))
.sorted()
.collect(Collectors.toList())
.toArray();
collect.forEach(System.out::println);
}
String[] listfiles = new String[stream.length];
for (int i = 0; i < stream.length; i++) {
listfiles[i] = stream[].getName();
}
try(Stream=Files.walk(start,Integer.MAX_值)){
列表收集=流
.stream().map(x->x.getName())
.filter(s->s.toString().endsWith(“.txt”))
.已排序()
.collect(收集器.toList())
.toArray();
collect.forEach(System.out::println);
}
String[]listfiles=新字符串[stream.length];
for(int i=0;i
您发布的代码存在一些问题
stream.stream()
类没有Stream
方法。因为它已经是一个流,所以使用这样的方法是没有意义的Stream()
x.getName()
- 此时,
是一个x
,它没有路径
方法。您可以使用返回路径的getName()
,或者以字符串形式返回路径的getFileName()
,或者将两者结合使用,以仅以字符串形式获取文件名toString()
List collect
分配给Collection.toArray()
的结果。
- 该方法返回一个
对象[]
toArray()
之前,使用collect(Collectors.toList())
。
类有一个Stream
方法,如果数组是所需的最终结果,则没有理由首先收集到列表中toArray()
toArray()
返回Object[]
(同时用于Stream
和Collection
)
- 您需要一个
,这意味着,由于不需要先收款,您需要打电话String[]
try
块之外使用stream
。
- 由于
是stream
块的本地,因此不能在try
块之外使用它。您也没有理由在块之外使用它,因为您只需要try
结果字符串[]
stream[]
的操作。
不是数组,不能像数组一样访问。而且,流
不是容器而是管道;试图访问其中的某些元素是没有意义的流
- 这也适用于
,因为stream.length
没有stream
字段(同样,因为它不是数组)length
如果要解决这些问题,您的代码可能会如下所示(基于当前的代码形式,因为我不确定您到底想做什么):
String[]结果;
try(Stream=Files.walk(开始,Integer.MAX_值)){
结果=stream.map(路径::toString)
.filter(s->s.endsWith(“.txt”))
.已排序()
.toArray(字符串[]::新建);
}
for(int i=0;i
你也可以考虑使用和/或A.P/>什么问题?编译错误?运行时错误?它运行但“不工作”?我遇到的问题如下:
类型stream的方法stream()未定义
流无法解析为变量
请删除.stream()
调用。我需要迭代结果并将结果添加到新数组中。我正在尝试,但没有得到答复<代码>字符串[]列表文件=结果;对于(int i=0;ilistfiles[i];
”没有任何作用。如果要复制,必须将元素从一个数组添加到另一个数组中。例如:listFiles[i]=result[i]代码>。阅读或其他一些内容可能会对您有所帮助。这是最后一个问题:如何将数组从字符串[]
转换为文件[]
?或者直接从流
获取文件[]
?您可能可以从字符串
创建文件
(即使用文件
的一个构造函数)。或者,如果您更改代码,使其不会将路径
映射到字符串
,则可以使用Path.toFile()
。我已修改了代码,但现在使用文件[]结果的筛选器endsWith出现错误;尝试(Stream-Stream=Files.walk(start,Integer.MAX_VALUE)){result=Stream.map(Path::toFile).过滤器(s->s.endsWith(“.ttl”)).sorted().toArray(File[]::new);}
String[] result;
try (Stream<Path> stream = Files.walk(start, Integer.MAX_VALUE)) {
result = stream.map(Path::toString)
.filter(s -> s.endsWith(".txt"))
.sorted()
.toArray(String[]::new);
}
for (int i = 0; i < result.length; i++) {
// do something
}