Lambda表达式

文章介绍了Java8引入的Lambda表达式特性,如何用更简洁的方式创建匿名内部类,特别是对于实现单方法接口的情况。通过FileFilter的例子展示了从传统匿名内部类到Lambda表达式的转换过程,包括删除方法名、大括号、return关键字以及参数列表的括号等步骤。
摘要由CSDN通过智能技术生成

Lambda表达式

JDK8之后,java支持了lambda表达式这个特性.

Alt+回车:是把可以简化的匿名内部类简化的快捷键

  • lambda可以用更精简的代码创建匿名内部类.但是该匿名内部类实现的[接口只能有一个抽象方法],否则无法使用!前端技术中一般称它为"箭头函数"

  • lambda表达式是编译器认可的,最终会将其改为内部类编译到class文件中,最终被编译器编到最原始的为代码

  • 语法

    (参数列表)->{
        方法体
    }
    
  • 最为原始的过滤器

    获取当前项目目录下名字以".txt"结束的所有子项

    public class ListFilesDemo2 {
        public static void main(String[] args) {
            File sub=new File(".");
            //过滤器
            FileFilter filter=new FileFilter() {
                public boolean accept(File file) {
                    String name=file.getName();
                    boolean b=name.endsWith(".txt");
                    return b;
                }
            };
    
            File[] subs=sub.listFiles(filter);
            System.out.println(subs.length);
            for (File file:subs){
                System.out.println(file.getName());
            }
        }
    }
    
  • boolean类型的放到return后边

    由于boolean返回的true或者falsereturn返回的true或者false是一致的

    public class ListFilesDemo2 {
        public static void main(String[] args) {
            File sub=new File(".");
            //过滤器
            FileFilter f1=new FileFilter() {
                public boolean accept(File file) {
                    return file.getName().endsWith(".txt");
                }
            };
        }
    }
    
  • 使用->

    删除方法名和大括号

    FileFilter f2 = (File file)->{
            return file.getName().endsWith(".txt");
    };
    
  • 参数的类型可以不写

    FileFilter f3 = (file)->{
            return file.getName().endsWith(".txt");
    };
    
  • 删除return

    如果方法体中**只有一句话代码,name方法体的"{}"可以忽略不写,并且如果这句话有return关键字,那么return一同忽略**.

    FileFilter f4 = (file)->file.getName().endsWith(".txt");
    
  • 删除"()"

    如果参数列表中只有一个参数,那么参数列表的"()"可以忽略不写

    FileFilter f5 = f->f.getName().endsWith(".txt");
    

**例子**🎍

获取当前目录下的所有名字以"test"开始的文件

  • 原始

    File dir = new File(".");
    dir.listFiles(new FileFilter() {
         public boolean accept(File file) {
             return file.getName().startsWith("test");
         }
    });
    
  • 简化

    File dir = new File(".");
    dir.listFiles(f->f.getName().startsWith("test"));
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值