关于jdk8中方法引用的问题?

今天看书,讲道JDK8中新增了lambda,可以实现方法引用

例如:System.out::print 等于 System.out.print

但是我还是没有明白,这样做的意义是什么呢?


书中有个练习题

1,使用java.io.File中的listFiles(FileFilter)和isDirectory()这两个方法实现找出某个文件夹下所有子文件夹的功能。

2,使用lambda表达式来代替FileFilter

3,再将它改写为一个方法引用


1和2我基本上完成了,大家可以看代码


public static void main(String[] args) {

        List<File> totalFiles = getSonFiles(new File("F:\\"));

    }


    static List<File> getSonFiles(File f){

        List<File> fileList = new ArrayList<>();

        File[] files = f.listFiles(file -> file.isDirectory());

        if(files == null || files.length == 0){

            return fileList;

        }

        for (File currentFile: files) {

            fileList.add(currentFile);

        }

        List<File> currentSonFiles = new ArrayList<>();

        for (File currentFile: fileList) {

            currentSonFiles.addAll(getSonFiles(currentFile));

        }

        fileList.addAll(currentSonFiles);

        return fileList;

    }

不知道这块代码有没有还需要改进的地方

至于3我真的是没有明白,到底该怎么改呢?

求大神带一下!!!


HUWWW
浏览 328回答 1
1回答

杨__羊羊

方法引用分为4类:引用静态方法&nbsp;Class::staticMethodName例子: (str) -> Integer.valueOf(str),对应 Integer::valueOf引用特定对象的实例方法&nbsp;Instance::instanceMethodName例子: (collection) -> list.addAll(collection),对应 list::addAll引用特定类型的的方法&nbsp;Type::methodName例子: (file) -> file.isDirectory,对应 File::isDirectory引用构造函数Class::new例子: () -> new Object(),对应 Object::new&nbsp;你这里属于第三种:static List<File> getSonFiles(File f) {&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; //File[] files = f.listFiles(file -> file.isDirectory());&nbsp; &nbsp; File[] files = f.listFiles(File::isDirectory); // 方法引用&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if (files == null || files.length == 0) {&nbsp; &nbsp; &nbsp; &nbsp; return new ArrayList<>(0);&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; List<File> fileList = new ArrayList<>();&nbsp; &nbsp; for (File currentFile : files) {&nbsp; &nbsp; &nbsp; &nbsp; fileList.add(currentFile);&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; List<File> currentSonFiles = new ArrayList<>();&nbsp; &nbsp; for (File currentFile : fileList) {&nbsp; &nbsp; &nbsp; &nbsp; currentSonFiles.addAll(getSonFiles(currentFile));&nbsp; &nbsp; }&nbsp; &nbsp; fileList.addAll(currentSonFiles);&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; return fileList;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java