Java的Lambda表达式详解(参考On Java8)
Posted 一只特立独行的猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java的Lambda表达式详解(参考On Java8)相关的知识,希望对你有一定的参考价值。
编程是美的,在处理复杂程序时,往往是考虑一个程序员优雅写代码的能力,虽然都能实现同一个功能,但是有经验的程序猿往往能写出易于维护,易于理解,更加优雅的的程序。
在使用Java的过程中,经常会用到一些东西,但是又没有必要专门为这个东西创建一个类或者函数,或者这个东西只用到一次,不需要专门去定义。 这时候出现了匿名类和匿名函数,使得代码更为优雅。 匿名类这里不做讨论,现在讨论的是匿名函数,即Lambda表达式。
实际意义:
通过直接使用接口来产生一个函数,省略中间创建类作为中转的情况。
基本格式
格式1:
(interface) a = (参数)->表达式
格式2:
(interface) a =(参数)->{表达式;}
注意点:
1.格式1只能有一个语句,默认该语句的结果作为返回值,不能存在return;格式2可以有多个返回值,必须存在return。
3.虽然Lambda 表达式产生函数,但是实际上在 JVM中,一切都是一个类,JVM会自动产生类进行中转,但是代码看起来就比较简洁。
用法说明
Lambda用于:
接口只有一个函数,但是为了使用该函数,不得通过类来实例化该接口(如红色线条所示)。但是为了简化代码,实际上没有必要实例化Add类,可以通过接口直接使用该函数,这就是Lambda函数的由来(图中黑色箭头所示)。
用法1:
需要在当前类使用addable的函数。
package Test;
//申明一个接口,接口只有一个函数申明
interface addable{
int add(int a, int b);
}
public class Main{
public static void main(String[] args) {
//用Lambda定义函数体,默认定义add方法
addable addTest = (a,b) -> a+b ;
//调用该接口的add方法
System.out.println(addTest.add(1,2));
}
}
用法2:
向函数中传入匿名函数作为参数
package Test;
interface addable{
int add(int a, int b);
}
public class Main{
public static void main(String[] args) {
//传入匿名Lambda函数
int sum = addTest((a,b)->a+b);
System.out.println(sum);
}
public static int addTest(addable addTest){
//相当于C++的函数指针,可以直接通过该接口调用add方法
return addTest.add(1,2);
}
}
总结:
总的来说,就是采用lambda来在代码层面跳过实例类,直接实例化函数,来增加代码的可读性和优雅性(实际上JVM还是创建了类)。
以上是关于Java的Lambda表达式详解(参考On Java8)的主要内容,如果未能解决你的问题,请参考以下文章