Java 8:映射而不是简单循环

吉米

我是Java 1.8中函数式编程的新手。我有一个简单的循环,如下面的代码:

File folder = new File("./src/renamer/Newaudio");
File[] listOfFiles = folder.listFiles();

for (int i = 0; i < listOfFiles.length; i++) {
    System.out.println("Here is file number: " + i);
}

我将for loop使用箭头功能(如lambda)将鞋面更改为功能格式。

listOfFiles.map((file) = > {
        System.out.println("Here is file number: " + i);
});

不幸的是,它抱怨:

Cannot invoke map((<no type> file) -> {}) on the array type File[]

为什么我会收到此错误?我该如何解决呢?

我喜欢学习Lambda,所以我对foreach不感兴趣

安德鲁·托比尔科(Andrew Tobilko)

folder.listFiles()应该用包裹起来Optional.ofNullable,以免引起不适NullPointerExceptionnull如果给定的路径名​​不表示目录,或者发生I / O错误,则可以返回

Stream.of(ofNullable(folder.listFiles()).
          orElseThrow(() -> new IllegalArgumentException("It's not a directory!")))
      .forEach(f -> {});

forEach方法可以采用以下参数:

(1)匿名班

new Consumer<File>() {
    public @Override void accept(File file) {
        System.out.println(file);
    }
}

(2)扩展lambda表达式

(File f) -> { System.out.println(f); }
(f) -> { System.out.println(f); }

(3)简化的lambda表达式

f -> { System.out.println(f); }
f -> System.out.println(f)

(4)方法参考

System.out::println

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章