一、Lambda表达式简介
什么是Lambda?
Lambda是JAVA 8 添加的一个新特性。说白了,Lambda就是匿名函数。
为什么要用Lambda?
使用Lambda表达式可以对一个接口方法进行非常简洁的实现。
Lambda对接口的要求?
虽然可以使用Lambda某些接口进行简单的实现,并不是所有接口都可以用Lambda表达式来实现。要求接口中定义的必须要实现的抽象方法只能是一个。
备注:在JAVA8对接口加了一个新特性:default。
@FunctionInterface
修饰函数式接口的。接口中的抽象方法只能有一个。
举个栗子(例子)
package com.zhangshangbiancheng; public class Program { public static void main(String[] args) { //1、接口实现类 Comparator comparator = new MyComparator(); //2、使用匿名内部类 Comparator comparator1 = new Comparator() { @Override public int compare(int a, int b) { return a - b; } }; //3、使用Lambda表达式实现接口 Comparator comparator2 = (a, b) -> a - b; } } class MyComparator implements Comparator { @Override public int compare(int a, int b) { return a - b; } } @FunctionalInterface interface Comparator { int compare(int a, int b); }
二、Lambda表达式基础语法
首先我们先创建六个接口,每个接口有一个方法,分别是无参无返回值、有一个参数无返回值、无返回值有多个参数、有返回值无参数、有返回值有一个参数、有返回值多个参数。
package com.zhangshangbiancheng.interfaces; @FunctionalInterface public interface LambdadSingleReturnMutipleParameter { int test(int a,int b); }
package com.zhangshangbiancheng.interfaces; @FunctionalInterface public interface LambdaNoneReaturnNoneParameter { void test(); }
package com.zhangshangbiancheng.interfaces; @FunctionalInterface public interface LambdaNoneReturnMutipleParameter { void test(int a,int b); }
package com.zhangshangbiancheng.interfaces; @FunctionalInterface public interface LambdaNoneReturnSingleParameter { void test(int a); }
package com.zhangshangbiancheng.interfaces; @FunctionalInterface public interface LambdaSingleReturnNoneParameter { int test(); }
package com.zhangshangbiancheng.interfaces; @FunctionalInterface public interface LambdaSingleReturnSingleParameter{ int test(int a); }
拿栗子知Lambda基本语法
package com.zhangshangbiancheng.syntax; import com.zhangshangbiancheng.interfaces.*; public class Syntax1 { public static void main(String[] args) { //1、Lambda表达式的基本语法 基本语法有关 //Lambda是一个匿名函数 //返回值类型 参数列表 方法体 //():用来描述参数列表 * //{}:用来描述方法体 * //->:Lambda运算符 读作goes to * //无参返回 LambdaNoneReaturnNoneParameter lambda1 = () ->{ System.out.println("掌上编程"); }; lambda1.test(); //无返回值、单个参数 LambdaNoneReturnSingleParameter lambda2 = (int a) ->{ System.out.println(a); }; lambda2.test(2); //无返回值、多个参数 LambdaNoneReturnMutipleParameter lambda3 = (int a,int b)->{ System.out.println( a + b ); }; lambda3.test(3,1); //有返回值、无参数 LambdaSingleReturnNoneParameter lambda4 = () -> { System.out.println("lambda4"); return 100; }; lambda4.test(); //有返回值、单个参数 LambdaSingleReturnSingleParameter lambda5 = (int a) -> { return a; }; lambda5.test(2); //有返回值、多个参数 LambdadSingleReturnMutipleParameter lambda6 = (int a,int b) ->{ return a+b; }; lambda6.test(1,1); } }
这么下来感觉也没怎么节省代码,接下来我们就进一步优化Lambda表达式。
三、Lambdad表达式语法精简
接下来我们对上面main函数的Lambda表达的是进行优化,优化如下(上代码):
package com.zhangshangbiancheng.data; public class Person { public String name; public int age; public Person(String name, int age) { this.name = name; this.age = age; System.out.println("有参"); } public Person() { System.out.println("无参"); }}
创建Syntax4:
package com.zhangshangbiancheng.syntax; import com.zhangshangbiancheng.data.Person; public class Syntax4 { public static void main(String[] args) { PersonCreater creater = () ->{ return new Person(); }; //上面代码优化如下 PersonCreater creater = () ->new Person(); //构造方法的引用 运行效果见下图 PersonCreater creater1 = Person::new; Person a = creater1.getPerson(); } } // 需求: interface PersonCreater{ Person getPerson(); }
调用有参创建接口
interface PersonCreater2{ Person getPerson(String name,int age); }
实现:
PersonCreater2 creater2 = Person::new; Person b = creater2.getPerson("掌上编程",21);
以上就是最简单的Lambda应用,若还不熟悉请继续看,记住基础很重要,后期更新Lambda综合案例。