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());
            }
        }
    }
}
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值