lambda表达式和匿名内部类

1.lambda表达式

  • JDK8之后推出的lambda表达式
  • lambda表达式可以"面向函数式编程"
  • lambda表达式给我们的直观感受是可以更简洁的语法创建匿名内部类
  • 当要实现的接口中【只有一个抽象方法】时,才可以使用lambda表达式替换原始的匿名内部类形式
  • 表达式实际是隐去new的接口名和方法名(因为接口中只有一个方法)
  • 表达式不是java虚拟机认可的,而是编译器认可的,最终被改为内部类形式编译到class文件中
基本语法
(参数列表)->{
	方法体
}
FileFilter filter=new FileFilter() {
    @Override
    public boolean accept(File file) {
        return file.getName().contains("s");
    }
};
简化1:隐去方法名和类型
FileFilter filter1=(File file)->{
    return file.getName().contains("s");
};
简化2:省略参数类型
FileFilter filter2=(file)->{
    return file.getName().contains("s");
};
简化3:省略"{}"
//如果方法体只有一句代码,方法体的"{}"可以忽略不写
//如果这句代码含有return关键字,那么忽略"{}"的同时也要一同忽略return
FileFilter filter4=(f)->f.getName().contains("s");
简化4:省略"()"
//如果只有一个参数"()"可以不写,如果方法是无参的"()"不能省略不写
FileFilter filter5=f->f.getName().contains("s");

2.FileFilter接口的简化小例

import java.io.File;
import java.io.FileFilter;
public class ListFilesDemo2 {
    public static void main(String[] args) {
        File dir=new File("./src/file");
       /* FileFilter filter=new FileFilter(){
            @Override
            public boolean accept(File file) {
                String name=file.getName();
                return name.contains("t");
            }
        };*/

        /*File[] subs = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File file) {
                return file.getName().contains("s");
            }
        });*/
        File[] subs = dir.listFiles(f->f.getName().contains("s"));
        if(dir.isDirectory()){
            for (int i=0;i<subs.length;i++){
                System.out.println(subs[i].getName());
            }
        }
    }
}

你可能感兴趣的:(java,开发语言)