本文共 2362 字,大约阅读时间需要 7 分钟。
以前,我们处理一个可以公用的业务逻辑的时候,一般都是先创建一个接口,接口标明要实现的功能,要传入的参数,返回的结果。
对于具体的业务逻辑,我们一般有两种方法:1写一个实现类,然后new这个现实类使用
2直接在使用中写匿名类。
两种方法都有很多缺点,写实现类,需要大量的代码,而且需要从外部导入,写匿名类的话,如果匿名类内部逻辑 太长,对造成代码不易阅读,很影响业务结构。
这种情况下就产生 了Lambda表达式,Lambda表达式可以用很简洁的语言来写接口的逻辑。
因为Lambda表达式并不事先指明使用的接口的方法,由系统自动判断,所以接口有且只能有一个方法。
(第一部分) ->{第二部分}
第一部分未接口方法的入参,可以不指明类型,会自动判断,第二部分为返回结果,如果一句话可以解决的,可以不加括号,多句话的需要加括号,切要显示指明,
返回的结果。
看例子1:
接口:
public interface ILambda { String getString(int a,String b);}测试:
public class LambdaTest { public static void main(String[] args){ ILambda iLambda=(a,b)->a+b;//实现了该接口 String result=iLambda.getString(100,"test"); System.out.println(result); }}100test
例子2(有多句处理逻辑的):
public class LambdaTest { public static void main(String[] args){ ILambda iLambda=(a,b)->{StringBuilder stringBuilder=new StringBuilder(); stringBuilder.append("System say:"); stringBuilder.append(a); stringBuilder.append(b); return stringBuilder.toString();}; String result=iLambda.getString(100," number!"); System.out.println(result); }}System say:100 number!
方法引用:
方法引用可以简化Lambda表达式
方法引用主要有三类:
(1)指向静态方法的方法引用,例如:(Integer::parseInt)
(2)指向任意类型实例方法的方法引用,例如:(String::length)
(3)指向现有对象的实例方法的引用,例如:(value::getValue)
第二种和第三种容易糊涂,其实第二种是Lambda表达式类部的实例,可以不用显示指出,第三种是外部的实例,内部无法
找到,所以要显示指出。
栗子:
public class Lambda{ public static String getString(int a, String b) { StringBuilder stringBuilder=new StringBuilder(); stringBuilder.append("System say:"); stringBuilder.append(a); stringBuilder.append(b); return stringBuilder.toString(); }}
public class Lambda1 implements ILambda{ @Override public String getString(int a, String b) { return "System say: "+a+b; }}
public class LambdaTest { public static void main(String[] args){ ILambda iLambda=Lambda::getString;//静态方法 String result=iLambda.getString(100," number!"); System.out.println(result); Lambda1 lambda1=new Lambda1(); ILambda iLambda1=lambda1::getString;//非静态方法 String result1=iLambda1.getString(200," number!"); System.out.println(result1); }}System say:100 number! System say: 200 number!
java8中新添加了很多函数式接口(只有一个方法的接口),我们要使用Lambda表达式的时候可以去找相关接口,基本都有,不用自己去创建一个。
转载地址:http://lljqi.baihongyu.com/