Java Lambda表达式

Posted 夜守护者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Lambda表达式相关的知识,希望对你有一定的参考价值。

Java Lambda表达式

1.Lambda是java8的新特性,lambda表达式也称为闭包,是在匿名内部类的基础上衍生出来的

2.Lambda表达式优点:避免了匿名内部类定义过多,减少了代码量

3.Lambda表达式的关键是函数式接口

函数式接口:任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口,如:

public interface Runnable
 public abstract void run();

4.Lambda表达式的推演(代码按这些类的顺序看,都注解了):普通内部类(1)-->静态内部内(2)-->局部内部类(3)-->匿名内部类(4)-->Lambda表达式()(5)(使用这些类时注意放的位置)

package cn.lexed.Demo3;
public class LambdaTest 
    //静态内部类
    static class People1 implements Note
        public void say() 
            System.out.println("I love you world");
        

      
 public static void main(String[] args)
     //接口实例化一个对象,向上转型
     Note note=new People();
     note.say();
     note=new People1();
     note.say();

     //局部内部类
     class People2 implements Note
        public void say() 
            System.out.println("I love you and world");

        

     
     note=new People2();
     note.say();
     //匿名内部类,没有类的名称,必须借助接口或者父类
     note=new Note()
     public void say()
         System.out.println("心中无物");
     

 ;
      note.say();
      //lambda简化
      note=()->
         System.out.println("心中无物");
      ;
      note.say();
    


//普通内部类
class People implements Note
    String name="未知";
    public void say()
        System.out.println("I love you"+name);
    


interface Note
    void say();

Lambda的化简

1.无参数,无返回值

语法:

note=()->
         System.out.println("心中无物");
      ;
      note.say();

2.当接口里方法只有一个参数,无返回值时:参数类型和括号可以省略

语法:

 Animal dog=name->
            System.out.println("我的名字是"+name+",我是这个家的看守者");
        ;
        dog.type("dog");

 interface Animal
    void type(String name);
       

3.两个参数,无返回值:参数类型可以省略

语法:

Animal dog=(name,age)->
            System.out.println("我的名字是"+name+"我"+age+"岁了,我是这个家的看守者");
        ;
        dog.type("dog",12);

interface Animal
    void type(String name,int age);
    
总结:

1.Lambda表达式只能有一行代码的情况下才能简化成为一行,如果多行用代码块包裹

2.前提是接口为函数式接口

3.多个参数也可以去掉参数类型,括号不可以去掉

<!--大家可以尝试下写两个参数有返回值的Lambda表达式-->

以上是关于Java Lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章

深入kotlin - lambda 表达式和高阶函数

java lambda

java lambda表达式

java中的lambda表达式是啥?

Lambda表达式的Java表达式

java拓展----探秘Lambda 表达式