java - 关于jdk8中方法引用的问题?
阿神
阿神 2017-04-17 17:48:44
[Java讨论组]

今天看书,讲道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我真的是没有明白,到底该怎么改呢?
求大神带一下!!!

阿神
阿神

闭关修行中......

全部回复(1)
天蓬老师

方法引用分为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;
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号