Java Lambda表达式详解——演化过程

8种写法,详解Lambda表达式怎么来的

注意:

1,lambda有一行代码的情况下,才能简化成一行,如果多行,则用代码块包装 2,前提是接口为函数式接口 3,多个参数也可以去掉参数,要去掉就要都去掉,必须加上括号

package com.chenxb.myLambda;

public class MyLambda {
          
   
    public static void main(String[] args) {
          
   
        //第一种写法,通过实现类
        Dog dog = new Dog();
        dog.setName("inplements");

        //第二种写法,通过实现类,简化
        new Dog().setName("implements2");

        //第三种写法,匿名内部类
        IAnimal iAnimal = new IAnimal() {
          
   
            @Override
            //这是匿名内部类当中的方法,重写了抽象类的方法
            public void setName(String name) {
          
   
                System.out.println(name);
            }
        };
        iAnimal.setName("anonymous");

        //第四种写法,匿名内部类,再简化
        new IAnimal() {
          
   
            @Override
            //这是匿名内部类当中的方法,重写了抽象类的方法
            public void setName(String name) {
          
   
                System.out.println(name);
            }
        }.setName("anonymous2");

        //第五种写法,lambda
        IAnimal iAnimalLambda = (String name) -> {
          
   
            System.out.println(name);
        };
        iAnimalLambda.setName("lambda");

        //第五种写法,lambda,去掉参数类型
        IAnimal iAnimalLambda2 = (name) -> {
          
   
            System.out.println(name);
        };
        iAnimalLambda2.setName("lambda2");

        //第六种写法,lambda,去掉括号
        IAnimal iAnimalLambda3 = name -> {
          
   
            System.out.println(name);
        };
        iAnimalLambda3.setName("lambda3");

        //第六种写法,lambda,去掉中括号
        IAnimal iAnimalLambda4 = name -> System.out.println(name);
        iAnimalLambda4.setName("lambda4");

        //第七种写法,lambda,代码块
        IAnimal iAnimalLambda5 = name -> {
          
   
            System.out.println(name);
            System.out.println(name);
        };
        iAnimalLambda5.setName("lambda5");

        //第八种写法,lambda,多个参数可以去掉参数类型,要同时去掉
        IPeople iPeople = (name,age) -> System.out.println(name + " " + age);
        iPeople.setName("lambda more para",18);

        /*注意:
        1,lambda有一行代码的情况下,才能简化成一行,如果多行,则用代码块包装
        2,前提是接口为函数式接口
        3,多个参数也可以去掉参数,要去掉就要都去掉,必须加上括号
         */

    }
}

interface IPeople {
          
   
    public abstract void setName(String name, int age);
}

class Man implements IPeople {
          
   
    @Override
    public void setName(String name, int age) {
          
   
        System.out.println(name + " " + age);
    }
}

interface IAnimal {
          
   
    public abstract void setName(String name);
}

class Dog implements IAnimal {
          
   
    @Override
    public void setName(String name) {
          
   
        System.out.println(name);
    }
}
经验分享 程序员 微信小程序 职场和发展