用java函数式编程——Lambda表达式

函数式编程

很多开发语言都开始支持函数式编程,其中最具备代表性的就是haskell。函数式编程和面向对象编程可以理解为两大开发阵营。

在函数式编程中,所有的数据都是不可变的,不同的函数之间通过数据流来交换信息,函数享有跟数据一样的地位,可以作为参数传递给下一个函数,同时也可以作为返回值。函数式编程的表达方式更加符合人类日常生活中的语法,代码可读性也更强。实现同样的功能,函数式编程比面向对象编程要少代码,所以更加容易看懂和理解。


与面向对象编程代码上的区别(用java演示)

java在jdk1.8之后,推出了lambda表达式,用于函数式编程,操作符为->

看 一段代码:

java中利用接口定义一个方法,由匿名内部子类实现,实例化后调用。

interface IMessage {
    void print();
}

public class lambda表达式 {
    public static void main(String[] args) {
        IMessage message = new IMessage() {
            @Override
            public void print() {
                System.out.println("hello IMessage");
            }
        };
        message.print();
    }
}

实现同样的功能,用lambda表达式:

interface IMessage {
    void print();
}
public class lambda表达式 {
    public static void main(String[] args) {
        IMessage message =  () -> System.out.println("hello IMessage");
        message.print();
    }
}

这就是lambda表达式基本用法。

总结一下

1、面向对象语法最大的局限:结构必须非常完整。

2、函数式编程简单,容易实现,但接口只能有一个方法,不然无法确定覆写哪个方法。

3、所以有了一个新的注解: @FunctionalInterface,表示这个是函数式编程的接口,如果有2个以上方法就会提示错误。

4、语法:(参数)-> {覆写接口唯一方法的代码}

(参数)-> {覆写接口唯一方法的代码}

多行代码演示: 

interface IMessage {
    void print();
}
public class lambda表达式 {
    public static void main(String[] args) {
        IMessage message =  () -> {
            System.out.println("hello IMessage1");
            System.out.println("hello IMessage2");
            System.out.println("hello IMessage3");
        };
        message.print();
    }
}

用处

比如多线程Thread覆写run的时候

public class Test {
    public static void main(String[] args) {
        //方式一
        Runnable runnable = () -> {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        };
        Thread thread = new Thread(runnable);
        
        //方式二
        Thread thread1 = new Thread(()->{
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
    }
}

猜你喜欢

转载自blog.csdn.net/likunkun__/article/details/84262345