java1.8新特性之Lamda表达式

来源:互联网 发布:linux权限设置 编辑:程序博客网 时间:2024/05/18 14:45

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 0
原创粉丝点击