lambad 表达式的简单理解

lambad 表达式:是Java8中新特性,Java8中引入lambad表达式,使得Java可以函数式编程,在并发性能上迈出了实质性的一步。
1.lambad 基本语法
(参数)->表达式 或者 (参数)->{方法体}
2.形参列表
形参列表允许省略形参类型,若形参列表中只有一个参数,形参列表的()也可以省略
3.箭头(->)
必须通过英文的划线号和大于符号组成
4.代码块
如果代码块只包含一条语句,lambad表达式允许省略代码块的花括号,那么这条语句就不要用花括号表示语句结束
5.返回值
lambad代码块只有一条return语句,甚至可以省略return关键字
lambad表达式需要返回值,而他的代码块中仅有一条省略的return语句,lambad会自动返回这条语句的结果

只要这个接口有一个抽象方法,我们都可以用lambad 表达式写

lambad表达式要求必须在接口中只有一个抽象方法的时候才可以使用,下边的例子简单实现了lambad表达式

public class Demo6 {
    
    
    public static void main(String[] args) {
    
    
        InterA interA1 =()->{
    
    
            System.out.println("lambad-show");
        };
        interA1.show();
        InterA interA2 = ()-> System.out.println("lambad简化版");
        interA2.show();
       //匿名内部类,这个也可以实现接口,但是他对于
       //接口中有几个抽象方法没有要求没几个都可以
        InterA interA = new InterA() {
    
    
            @Override
            public void show() {
    
    
                System.out.println("interA-show");
            }
        };
        interA.show();
    }
}
interface  InterA{
    
    
    public void show();
}

对于lambad有参数,无参数,有无返回值的介绍

public class Demo7 {
    
    
    public static void main(String[] args) {
    
    
        //对于没有参数的情况
        InterA1 interA1 = () -> {
    
    
            System.out.println("没有参数的");
        };
        interA1.show();
        //简化版,如果
        InterA1 interA12 = () -> System.out.println("没有参数的简化版");
        interA12.show();

        //对于有一个参数的情况
        InterB interB = (a)->{
    
    
            System.out.println("有一个参数"+a);
        };
        interB.showB(3);
        //简化版,如果只有一个参数,可以把参数的()省略
        InterB interB1 = a->System.out.println("有一个参数的简化版"+a);
        interB1.showB(3);

        //对于有两个参数
        InterC interC = (a,b)->{
    
    
            System.out.println("有两个参数"+a+""+b);
        };
        interC.showC(3,4);
        //简化版
        InterC interC1 = (a,b)-> System.out.println("简化版"+a+""+b);
        interC1.showC(3,4);

        //有返回值
        InterD interD = (a,b)->{
    
    
            return a+b;
        };
        int sum1 = interD.showD(3,4);
        System.out.println(sum1);
        //简化版,对于有返回值的,如果一句话,也可以不写return
        InterD interD1 = (a,b)->a+b;
        int sum2 = interD1.showD(2,3);
        System.out.println(sum2);

        //接口作为参数,匿名对象
        fun2(new InterC() {
    
    
            @Override
            public void showC(int a, int b) {
    
    
                System.out.println(a+b);
            }
        });
        //lambad实现接口作为参数
        fun2((i,j)->{
    
    System.out.println("lambad实现接口作为参数");});
    }
    public static void fun2(InterC interC){
    
    

    }
}
interface InterA1{
    
    
    public void show();
}
interface  InterB{
    
    
    public void showB(int a);
}
interface  InterC{
    
    
    public void showC(int a,int b);
}
interface InterD{
    
    
    public int showD(int a,int b);
}
//主要作用就是检查当前接口是不是函数接口
@FunctionalInterface
interface InterE{
    
    
    public void showF(int a);
}

在应用中省略的都是参数

/*
省略的都是参数
 */
public class Demo8 {
    
    
    public static void main(String[] args) {
    
    
        //1.引用类方法
       Test.fun1();
        //2.引用特定对象的实例方法
        Test.fun2();
        //3.引用某类对象的实例方法
        Test.fun3();
        //4.引用构造方法
        Test.fun4();
    }
}
interface Convert{
    
    
  Integer convert(String name);
}
interface IA{
    
    
    public void show(String message);
}
class A{
    
    
    public void play(String i){
    
    
        System.out.println("这是A的方法"+i);
    }
}
interface IB{
    
    
    String subString1(String string,int start,int end);
}
interface IC{
    
    
    Object show(String name,int age);
}
class Test{
    
    
  public static void fun1(){
    
    
      Convert convert = name -> Integer.valueOf(name);
      convert.convert("111");
      //简化
      Convert convert1 =  Integer::valueOf;
      convert1.convert("22");
  }
  public static void fun2(){
    
    
      //正常
      IA ia = (mes)->new A().play(mes);
      ia.show("mes");
      //简化
      IA ia1 = new A()::play;
      ia1.show("mes");
  }
  public static void fun3(){
    
    
      IB ib = (string,start,end)->string.substring(start,end);
      String str = ib.subString1("aswe",0,2);
      System.out.println(str);
      //简化
      IB ib1 =String::substring;
      String str1 = ib1.subString1("aff",0,1);
      System.out.println(str1);
  }
  public static void fun4(){
    
    
      IC ic = (name,age)->new Person5(name,age);
      Object o1 =ic.show("bing",10);
      System.out.println(o1);
      //简化
      IC ic1 = Person5::new;
      Object o2 = ic1.show("aaa",20);
      System.out.println(o2);
  }
}
class Person5{
    
    
    String name;
    int age;

    @Override
    public String toString() {
    
    
        return "Person5{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Person5(String name, int age) {
    
    
        this.name = name;
        this.age = age;
    }
}

猜你喜欢

转载自blog.csdn.net/m0_51327764/article/details/109264409