gpt4 book ai didi

Java 8 : Map instead of simple loop

转载 作者:行者123 更新时间:2023-12-03 02:28:35 25 4
gpt4 key购买 nike

我是 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);
}

我将使用箭头函数(如 lambda)将上面的 for 循环 更改为函数格式。

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

不幸的是,它提示:

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

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

我喜欢了解 Lambda,所以对 foreach 不感兴趣

最佳答案

您可以使用IntStream.range仅打印文件编号

    IntStream.range(0,listOfFiles.length).forEach(System.out::println);

或者要打印您可以使用的数组内容

    Arrays.stream(listOfFiles).forEach(System.out::println);

编译器会将你的方法引用转换为编译时的 lambda 表达式所以这样

    Arrays.stream(listOfFiles).forEach(System.out::println);

将被转换成这样

=>  Arrays.stream(listOfFiles).forEach(i->System.out.println(i));

通过 lambda,您也可以使用扩展的 lambda {}

=> Arrays.stream(listOfFiles).forEach(i->{
if (!i.isHidden()) { // don't print hidden files
System.out.println(i);
}
});

所以listFiles返回 null 文件不是目录,为简单起见,您可以简单地在第一个位置进行检查

    File folder = new File("./src/renamer/Newaudio");
if (folder.isDirectory()) {
File[] listOfFiles = folder.listFiles();
Arrays.stream(listOfFiles).forEach(i->System.out.println(i));
}

引用

Lambda and Method reference concise details

关于Java 8 : Map instead of simple loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41678134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com