且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-10-14 23:26:35

方法引用分为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;
}