Java学习之Lambda表达式的深入理解和使用

1、lambda表达式

    避免匿名内部类定义过多 其实质是属于函数式编程的概念 (params)-> expression[ 表达式 ] (params)-> statement[语句 ] (params)-> {statements}

2、函数式接口

    任何接口、如果只包含唯一一个抽象方法,那么它就是一个函数式接口 public interface Runnable{ public abstract void run(); } 对于函数式接口,可以通过lambda表达式来创建该接口的对象

3、演化进程

//函数式接口
public interface Person {
          
   
    void speak(String str);
}
//方式一: 接口实现类
class p1 implements Person{
          
   

    @Override
    public void speak(String str) {
          
   
        System.out.println(str);
    }
}

public class LanmbdaTest {
          
   
    //方式二:静态内部类
    static class p2 implements Person{
          
   

        @Override
        public void speak(String str) {
          
   
            System.out.println(str);
        }
    }
    public static void main(String[] args) {
          
   
        //方式三:局部内部类
        class p3 implements Person{
          
   

            @Override
            public void speak(String str) {
          
   
                System.out.println(str);
            }
        }
        
        Person p1 = new p1();
        p1.speak("1");
        
        Person p2 = new p2();
        p2.speak("2");

        Person p3 = new p3();
        p3.speak("3");
        
        //方式四:匿名内部类
        Person p4 = new Person() {
          
   
            @Override
            public void speak(String str) {
          
   
                System.out.println(str);
            }
        };
        
        p4.speak("4");
        //方式五:lambda表达式
        Person p5=(String str)->{
          
   
            System.out.println(str);
        };
        p5.speak("5");

    }
}

4、Lambda的简化

public class LambdaTest2 {
          
   
    public static void main(String[] args) {
          
   
        //常态
        Person p1 = (String str) -> {
          
   
            System.out.println(str);
        };
        //简化1:去掉类型
        Person p2 = (str) -> {
          
   
            System.out.println(str);
        };
        //简化2:去掉括号
        Person p3 = str -> {
          
   
            System.out.println(str);
        };
        //简化3:去掉花括号
        Person p4 = str -> System.out.println(str);
        
        p1.speak("1");
        p2.speak("2");
        p3.speak("3");
        p4.speak("4");

    }
}
    总结 lambda 表达式只有一行代码的情况下,才能简化成一行。多行的时候得用{ }包裹 p = str->{ System.out.println(str); System.out.println(str); } lambda表达式才多参数的时候,也可以去掉参数类型,去掉就得都去掉。 lambda表达式只有一个参数的情况下,才能去掉括号。多参数的时候得加上括号 p = (str1,str2)->{ System.out.println(str1); System.out.println(str2); }
经验分享 程序员 微信小程序 职场和发展