为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUWWW 2019-03-12 18:15:53
今天看书,讲道JDK8中新增了lambda,可以实现方法引用例如:System.out::print 等于 System.out.print但是我还是没有明白,这样做的意义是什么呢?书中有个练习题1,使用java.io.File中的listFiles(FileFilter)和isDirectory()这两个方法实现找出某个文件夹下所有子文件夹的功能。2,使用lambda表达式来代替FileFilter3,再将它改写为一个方法引用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我真的是没有明白,到底该怎么改呢?求大神带一下!!!
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

方法引用分为4类:


引用静态方法 

Class::staticMethodName


例子: (str) -> Integer.valueOf(str),对应 Integer::valueOf

引用特定对象的实例方法 

Instance::instanceMethodName


例子: (collection) -> list.addAll(collection),对应 list::addAll

引用特定类型的的方法 

Type::methodName


例子: (file) -> file.isDirectory,对应 File::isDirectory

引用构造函数

Class::new


例子: () -> new Object(),对应 Object::new 

你这里属于第三种:


static List<File> getSonFiles(File f) {

        

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

    File[] files = f.listFiles(File::isDirectory); // 方法引用

    

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

        return new ArrayList<>(0);

    }

    

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

    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;

}


查看完整回答
反对 回复 2019-04-18
  • 1 回答
  • 0 关注
  • 325 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号