为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法将流的结果转换为数组并循环访问数组元素?

有没有办法将流的结果转换为数组并循环访问数组元素?

Cats萌萌 2022-09-22 19:30:35

我已经创建了一个递归运行的文件和文件夹的数量。我需要将 的结果转换为 并循环访问 .StreamStreamArrayArray


我在使用以下代码时遇到问题:


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();

    }


查看完整描述

1 回答

?
12345678_0001

TA贡献1467条经验 获得超5个赞

您发布的代码存在一些问题。

  1. 您拨打stream.stream()

    • 该类没有方法。它使用这种方法是没有意义的,因为它已经是一个流。Streamstream()

  2. 您拨打x.getName()

    • 此时,是一个没有方法的。可以使用 ,它返回一个 、 或 ,它将路径作为字符串返回,或者将两者组合在一起,仅将文件名作为字符串获取。xPathgetName()getFileName()PathtoString()

  3. 将 分配给 的结果。List<String> collectCollection.toArray()

    • 该方法返回一个 .Object[]

  4. 在调用 之前使用 。collect(Collectors.toList())toArray()

    • 该类有一个方法,如果数组是所需的最终结果,则没有理由首先收集到列表中。StreamtoArray()

  5. 使用哪个返回(包括 for 和toArray()Object[]StreamCollection)

  6. 您在块外使用。streamtry

    • 由于是块的本地,因此不能在块外使用它。您也没有理由在块之外使用它,因为您只需要结果。streamtrytryString[]

  7. 您尝试执行类似 执行的操作。stream[]

    • A 不是数组,不能像数组一样访问。此外,a不是容器,而是管道;尝试访问其中的某些元素没有意义。StreamStream

    • 这也适用于 因为 没有字段(同样,因为它不是数组)。stream.lengthStreamlength


解决这些问题,您的代码可能如下所示(基于代码的当前形式,因为我不确定您到底要做什么):

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
  }

您也可以考虑使用文件查找(路径,整数,双向预测,文件访问选项...)和/或路径垫。


查看完整回答
反对 回复 2022-09-22

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信