java8函数式编程学习

    xiaoxiao2025-07-12  5

    目录:

    1. 函数式编程介绍

    2. Lambda表达式

    3. 函数式接口

     

    一. 函数式编程介绍

    面向对象编程的思想是对数据进行抽象,而面向函数编程的思想是对行为方法进行抽象。函数式编程的好处主要有:

    1.函数式编程可以减少业务逻辑和代码的分歧。他允许我们再更高层次更自然的描述业务逻辑。

    2.许多样板可以被移除,这会让代码更清晰和简洁。

    3.高阶函数允许我们:发送方法到其他方法中;在其他方法中创建方法;从其他方法中返回方法。

    4.ldambda表达式,实现惰性求职,当发送lambda表达式作为一个方法的参数,java编译器会在lambda表达式在方法中被调用时才计算他的值。 

     

    二. Lambda表达式

    Lambda表达式的实现是为了支持函数式编程,而为了支持lambda表达式,才有了函数式接口。 另外,在面对大型数据集合时,为了能够更加高效的开发,编写的代码更加易于维护,更加容易运行在多核CPU上,java在语言层面增加了Lambda表达式。

    Lambda表达式使用: 例如运行一个线程一般这样写:

    new Thread(new Runnable()) { @Override public void run() { System.out.println("Testing!"); } }).start();

    使用lambda代码非常简洁:

    new Thread( () -> System.out.println("Testing!"); );

    三. 函数式接口

    java8中接口变化:

    1.静态方法:为了编写类库,对某些行为进行抽象。 2.默认方法:为了实现二进制的向后兼容性,引入了带有方法体、被default修饰的方法--默认方法。其主要思想就是如果子类中没有实现,那么采用父类提供的默认实现。

    函数式接口,与其他接口的区别:

    1. 函数式接口中只有一个抽象方法。

    2. 可以有从Object继承过来的抽象方法,因为所有类的最终父类都是Object。

    3. 接口中唯一抽象方法的命名不重要,因为函数式接口就是对某一行为进行抽象,主要目的是支持lambda表达式。

    Java8之前已经存在的函数式接口有:

    java.lang.Runnable java.util.concurrent.Callable java.security.PrivilegedAction java.util.Comparator java.io.FileFilter java.nio.file.PathMatcher java.lang.reflect.InvocationHandler java.beans.PropertyChangeListener java.awt.event.ActionListener javax.swing.event.ChangeListener

    另外,Java8还提供了@FunctionalInterface注解来帮助我们标识函数式接口。另外需要注意的是函数式接口的目的是对某一个行为进行封装,某些接口可能只是巧合符合函数式接口的定义。

    如图1-3所示,为java8的Function包的结构(即新引入的函数式接口),图中绿色表示主要引入的新接口,其他接口基本上都是为了支持基本类型而添加的接口,方法的具体作用图中有具体说明。

    实例: 自定义函数接口支持lambda表达式

    public class LambdaMain { public static void main(String[] args) { Action action = System.out :: println; action.execute("Hello World!"); test(System.out :: println, "Hello world!"); test(action, "Hello world!"); } static void test(Action action, String str) { action.execute(str); } } @FunctionalInterface interface Action<T> { public void execute(T t); }

    原文地址:https://www.cnblogs.com/Dorae/p/7769868.html

    最新回复(0)