Java lambda表达式

Java lambda表达式

一.简介

​ Lambda 表达式,也可称为闭包,是一个匿名函数,将行为像数据一样进行传递,也就是变量或者参数都有可能是一段具有功能作用的函数,而不只是数据。

二. 语法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CgUErIbJ-1627218873445)(D:\思维导图项目\java\lambda表达式\photo1.png)]

  • **可选类型声明:**不需要声明参数类型,编译器可以统一识别参数值。
  • **可选的参数圆括号:**一个方法参数无需定义圆括号,但多个参数需要定义圆括号。
  • **可选的大括号:**如果主体包含了一个语句,就不需要使用大括号。
  • **可选的返回关键字:**如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
三. 作用
  1. 代替匿名内部类

    首先我们来看看示例,通过匿名内部类 ,创建了一个线程。

    
    public class LambdaTest {
        public static void main(String[] args) {
            new Thread(new Runnable() {
                @Override       //实现了Runable接口
                public void run() {
                    System.out.println("这是一个匿名内部类");
                }
            }).start();
        }
    
    

    但是这还不够简洁,所以使用lambda表达式改写

    分析一波:

     1. 没有参数 所以只需要一个()
        2. 程序知道是那个方法, 无需加“public void run()” 只有一条语句, 所以代码块可以不用 ,去掉{}  
    
    
    public class LambdaTest {
        public static void main(String[] args) {
            new Thread(() -> System.out.println("改写成了lambda")).start();
        }
    }
    
四. 示例
 1. 无参数,无返回值

    ```java
    public class LambdaTest {
        public static void main(String[] args) {
            Runnable runnable = ()->System.out.println("无参数,无返回值");
            runnable.run();
        }
    }
    
    ```

​ 2.一个参数, 无返回值

public class LambdaTest {
    public static void main(String[] args) {
        Demo consumer = s -> System.out.println(s);
        consumer.lambda("一个参数,无返回值");

    }
}

//定义的接口
@FunctionalInterface
public interface Demo {
    public void lambda(String s);
}

3.有多个参数, 有返回值

public class LambdaTest {
    public static void main(String[] args) {
        Demo consumer = (a ,b) -> {return a + b;} ;
        consumer.lambda(1,2);

    }
}

//定义的接口
@FunctionalInterface
public interface Demo {
    public int lambda(int a , int b );
}


五.函数式接口

Lambda表达式的目标类型必须是“函数式接口(functional interface)”。函数式接口:只包含一个抽象方法的接口。接口可以包含多个默认方法、类方法,但关键是一个抽象方法。所谓函数式接口,指的是只有一个抽象方法的接口。函数式接口可以被隐式转换为Lambda表达式。函数式接口可以用@FunctionalInterface注解标识。

1.自定义函数式接口

 //定义的接口
   @FunctionalInterface
   public interface Demo {
       public int lambda(int a , int b );
   }
六.方法引用和构造器引用 (::操作符)

方法引用和构造器引用可以让Lambda表达式的代码在简洁的基础上再简洁,使用::双冒号来使用方法引用,看看有几种引用方式:

  • 对象::实例方法名

  • 类::静态方法名

  • 类::实例方法名

    import java.util.Arrays;
    import java.util.List;
    
    public class LambdaTest {
        public static void main(String[] args) {
    
            List<String> list = Arrays.asList("aaaa", "bbbb", "cccc");
            //静态方法语法	ClassName::methodName
            list.forEach(LambdaTest::print);
            System.out.println("=======================");
            //对象::实例方法名
            LambdaTest lambdaTest = new LambdaTest();
            list.forEach(lambdaTest::print1);
            //类::实例方法名
            System.out.println("=======================");
          
        }
    
        public static void print(String content){
            System.out.println(content);
        }
        public  void print1(String content){
            System.out.println(content);
        }
    }
    

    类构造器语法

    public class Example {
        public static void main(String [] args) {
            InterfaceExample com =  Example::new;
            Example bean = com.create();
            System.out.println(bean);
        }
    }
    
    interface InterfaceExample{
        Example create();
    }
    
    

    到此就介绍完啦!!!

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值