1
考慮下面的代碼:方法File.listFiles(的FilenameFilter)不適用於謂詞
File f = new File(".");
Predicate<File> notDir = (File ff) -> !ff.isDirectory();
File [] dirs = f.listFiles(notDir);
Arrays.asList(dirs).stream().forEach(System.out::println);
其中給出以下編譯時錯誤:
The method listFiles(FilenameFilter) in the type File is not applicable for the arguments (Predicate)
但是,下面的代碼工作正常:
File f = new File(".");
File [] dirs = f.listFiles((File ff) -> !ff.isDirectory());
Arrays.asList(dirs).stream().forEach(System.out::println);
問題:這是爲什麼?上述兩個片段是否相同? (好吧,可能不是,所以也許是正確的問題是:兩者有什麼區別?)
(備註:我知道在第二種情況下,File
類型聲明可以在謂詞(File ff) -> !ff.isDirectory()
中被省略,但是我認爲這個問題並不重要。)
,使用'謂詞 notDir = P - > Files.isDirectory(P):所以第二個片段實際上相當於! Files.list(f.toPath()).filter(notDir).forEach(System.out :: println);'或者跳過舊的'File'完全使用:'Files.list(Paths.get(「」)) .filter(notDir).forEach(System.out :: println);' –
Holger