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;i
    listfiles[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
    }