Lambda表达式

以前,我们处理一个可以公用的业务逻辑的时候,一般都是先创建一个接口,接口标明要实现的功能,要传入的参数,返回的结果。

对于具体的业务逻辑,我们一般有两种方法: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表达式的时候可以去找相关接口,基本都有,不用自己去创建一个。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值