Java Lambda 表达式

Java Lambda 表达式JavaLambda表达式

一、说明

Lambda表达式是什么

  • Lambda 表达式也称为闭包,是Java 8 发布的新特性
  • Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)

为什么要使用Lambda表达式

  • 避免匿名内部类定义过多,可以让代码简洁紧凑,留下核心的逻辑

二、理解

语法格式

(parameters) -> expression[表达式]
(parameters) -> statements[语句]
(parameters) ->{ 
    statements; }

函数式接口

Functional lnterface(函数式接口)是指任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口,可以通过Lambda表达式创建该接口的对象

public interface Runnable { 
   
    public abstract void run();
}

特征

  • 可省略类型声明:不需要声明形式参数类型
  • 可省略参数括号:一个参数无需定义括号,但多个参数需要定义括号
  • 可省略花括号:如果主体只包含了一个语句就不需要使用花括号
  • 可省略返回关键字:如果主体只包含了一个返回值语句则会自动返回

三、演示

1.常规方法实现

正常情况下的实现加法函数计算,需要定义接口并实现类,再调用方法,在此基础上不断简化,去深入理解Lambda 表达式是如果做到的
在这里插入图片描述

public class LambdaDemo { 
   
	
    public static void main(String[] args) { 
   
    //3.执行计算
        MathOperation addition = new Addition();
        addition.operation(1,2);
    }
}
    //1.定义一个函数式接口方法
interface MathOperation{ 
   
    void operation(int a, int b);
}
    //2.定义实现类
class Addition implements MathOperation{ 
   
    @Override
    public void operation(int a, int b) { 
   
        System.out.println(a + b);
    }
}

2.静态内部类

进一步改进使得代码更紧凑,实现静态内部类,也就是将实现类放入主类中,会提示我们需要定义静态类

在这里插入图片描述
在这里插入图片描述

public class LambdaDemo { 
   
    //2.实现静态内部类
    static class Addition implements MathOperation{ 
   
        @Override
        public void operation(int a, int b) { 
   
            System.out.println(a + b);
        }
    }
    public static void main(String[] args) { 
   
    //3.执行计算
        MathOperation addition = new Addition();
        addition.operation(1,2);
    }
}
    //1.定义一个函数式接口
interface MathOperation{ 
   
    void operation(int a, int b);
}

3.局部内部类

可是静态内部类还是太繁琐了,如果把它放进方法里面呢?由此引出局部内部类,即在一个方法中定义的内部类,这时就不用定义静态类了

在这里插入图片描述

public class LambdaDemo { 
   
    public static void main(String[] args) { 
   
    //2.实现局部内部类
        class Addition implements MathOperation{ 
   
            @Override
            public void operation(int a, int b) { 
   
                System.out.println(a + b);
            }
        }
    //3.执行计算
        MathOperation addition = new Addition();
        addition.operation(1,2);
    }
}
    //1.定义一个函数式接口
interface MathOperation{ 
   
    void operation(int a, int b);
}

4.匿名内部类

局部内部类还是感觉代码太多了,如果简化呢?比如把类名隐藏?匿名内部类就是没有名字的内部类,其必须实现接口或抽象父类的所有抽象方法

在这里插入图片描述

public class LambdaDemo { 
   
    public static void main(String[] args) { 
   
    //2.实现匿名内部类,实现接口,直接执行计算
        new MathOperation(){ 
   
            @Override
            public void operation(int a, int b) { 
   
                System.out.println(a + b);
            }
        }.operation(1, 2);
    }
}
    //1.定义一个函数式接口
interface MathOperation{ 
   
    void operation(int a, int b);
}

在这里插入图片描述

public class LambdaDemo { 
   
    public static void main(String[] args) { 
   
    //2.实现匿名内部类,实现接口
        MathOperation addition = new MathOperation() { 
   
            @Override
            public void operation(int a, int b) { 
   
                System.out.println(a + b);
            }
        };
    //3.执行计算
        addition.operation(1,2);
    }
}
    //1.定义一个函数式接口
interface MathOperation{ 
   
    void operation(int a, int b);
}

5.Lambda表达式

都已经没有类名了,能否再简化呢?用Lambda试试,因为接口中只有一个方法,方法中只有一块语句,因此可以省略接口和方法,只留下语句实现

在这里插入图片描述

public class LambdaDemo { 
   
    public static void main(String[] args) { 
   
        //2.Lambda简化,只有一块语句,省略接口和方法,只留下语句实现
        MathOperation addition = (int a , int b) -> { 
   
            System.out.println(a + b);
        };
        //3.执行计算
        addition.operation(1, 2);
    }
}
        //1.定义一个函数式接口
interface MathOperation{ 
   
    void operation(int a, int b);
}

6.Lambda再简化

Lambda 表达式还可以省略参数类型,因为一行语句,因此可以省略花括号

在这里插入图片描述

public class LambdaDemo { 
   
    public static void main(String[] args) { 
   
        //2.Lambda简化,省略参数类型,代码块只有一句,可以省略花括号
        MathOperation addition = (a , b) -> System.out.println(a + b);
        //3.执行计算
        addition.operation(1,2);
    }
}
        //1.定义一个函数式接口
interface MathOperation{ 
   
    void operation(int a, int b);
}

今天的文章Java Lambda 表达式分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/4796.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注