java1.8新特性之Lamda表达式

Lamda属于函数式编程的概念,那么为什么需要函数式的编程呢?

如何要想清楚函数式编程的产生目的,那么我们必须通过匿名内部类来分析。

传统的内名内部类:

package com.wonglar.demo;

interface IMessage{
    public void print();
}

public class Demo {
    public static void main(String[] args) {
        fun(new IMessage() {
            @Override
            public void print() {
                System.out.println("Hello World !");
            }
        });
    }

    public static void fun(IMessage msg){
        msg.print();
    }
}

实际上整个代码当中,我们最终需要的就是一个输出而已,由于java开发的结构性的完整要求,所以不得不在这个核心的语句上嵌套更多的内容。

以上的做法要求的实在过于严谨了,所以在java的1.8时代引入了函数式的编程,可以简化以上的代码。

使用Lamda表达式:

package com.wonglar.demo;

interface IMessage{
    public void print();
}

public class Demo {
    public static void main(String[] args) {
        fun(()->System.out.println("Hello World !"));
    }

    public static void fun(IMessage msg){
        msg.print();
    }
}

整个的操作里面匿名内部类只是进行了一行语句的输出,所以使用了Lamda表达式可以非常轻松的实现要求。

对于Lamda语法有三种形式:

  1. (参数)->单行语句;
  2. (参数)->{单行语句};
  3. (参数)->表达式。

有参的单行语句:

package com.wonglar.demo;

interface IMessage{
    public void print(String str);
}

public class Demo {
    public static void main(String[] args) {
        //首先要定义此表达式需要接受的变量,单行语句直接进行输出。
        fun((s)->System.out.println(s));
    }

    public static void fun(IMessage msg){
        msg.print("Hello World !");
    }
}

多行语句:

package com.wonglar.demo;

interface IMessage{
    public void print(String str);
}

public class Demo {
    public static void main(String[] args) {
        //首先要定义此表达式需要接受的变量,单行语句直接进行输出。
        fun((s)->{
            s = s.toUpperCase();
            System.out.println(s);
        });
    }

    public static void fun(IMessage msg){
        msg.print("Hello World !");
    }
}

如果说现在代码里面只是一个简单的计算表达式,那么操作也可以很容易。

编写一个表达式:

package com.wonglar.demo;

interface IMessage{
    public int add(int x,int y);
}

public class Demo {
    public static void main(String[] args) {
        //首先要定义此表达式需要接受的变量,单行语句直接进行输出。
        fun((num1,num2)->num1+num2);
    }

    public static void fun(IMessage msg){
        System.out.println(msg.add(10,5));
    }
}

总结:

利用Lamda表达式最终解决的问题,避免了匿名内部类定义过多无用的操作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值