【问题标题】:Java: reading from File folder and adding each to ArrayListJava:从 File 文件夹中读取并将每个添加到 ArrayList
【发布时间】:2020-04-26 21:17:23
【问题描述】:

考虑这段代码:

private static ArrayList<Level> levels = new ArrayList<>();

static {
    try (Stream<Path> paths = Files.walk(Paths.get("levels"))) {
        paths
            .filter(Files::isRegularFile)
            .forEach(levels.add(new Level(file))); //CAN'T DO!!
    } catch (IOException e) {
        e.printStackTrace();
    } 
}

我认为代码几乎说明了我正在尝试做的事情。我在某处找到了这段代码,并尝试应用它,从包含 level1.txt、level2.txt 等文件的文件夹创建关卡对象。关卡类将文件作为参数。

forEach 方法给出一个 SyntaxError。

  1. 过滤方法中的“::”是什么?
  2. 为什么路径被新行和 2 种方法占用?以前从未见过这样的事情。
  3. 我怎样才能使它正常工作?

【问题讨论】:

  • "此代码无效。"请提供充分的错误描述,包括错误的完整副本并将其编辑到问题中。
  • 1 可以用谷歌搜索 (stackoverflow.com/questions/20001427/…)。 2 只是返回行,与paths.filter(Files::isRegularFile).forEach(levels.add(new Level(file))); 相同,即Stream(此处为链接方法)
  • 你应该把一个像(file) -&gt; levels.add(new Level(file))这样的lambda放入forEach而不是一个表达式

标签: java file stream


【解决方案1】:
  1. following 很好地解释了自 Java 8 以来:: (double colon) 运算符是什么

  2. 代码可以写成多行运行,但这与下面的相同。你调用filter方法然后在filter返回的对象上调用forEach

    paths.filter(Files::isRegularFile).forEach(levels.add(new Level(file)));   
    
  3. 让它工作,你需要定义file 变量,这是用 lambda 函数完成的

    paths.filter(Files::isRegularFile).forEach(file -> levels.add(new Level(file)));   
    

不可能,因为walks() throws IOException

如果您不需要try/catch,您可以使用Collectors 直接构建列表

private static ArrayList<Level> levels = Files.walk(Paths.get("levels"))
                                              .filter(Files::isRegularFile)
                                              .map(file -> new Level(file))
                                              .collect(Collectors.toList());

【讨论】:

  • 代码不起作用。我在 levels.add(new Level(file). 中得到 SyntaxError
  • @DanielOscar 我没有;所以给出错误的确切细节和Level类的构造函数
  • Level 构造函数只接受一个 File 对象作为参数。
  • IDE 建议我将 Level 的构造函数改为接收 Path 对象
  • @DanielOscar walk 给出了 Path not File 的实例,因此您可以调整、使用 Path 或获取路径后面的文件
猜你喜欢
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
相关资源
最近更新 更多