栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java8:面向函数式编程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java8:面向函数式编程

Java8:面向函数式编程

面向函数式编程是一种编程范式,是面向数学的抽象,将计算描述为一种表达式求值,其实,函数式程序就是一个表达式。

在 Java8 之前,Java语言一直倡导“一切皆对象”,在 Java 语言中,面向对象就是一切。但是随着 python 、scala 等语言的兴起和新技术的挑战,Java 不得不做出调整以支持更加广泛的技术要求。Java8 开始,Java开始支持 OOF (面向函数编程)

函数式接口

函数式接口:只声明了一个抽象方法的接口通过 @FunctionalInterface 注解声明一个函数式接口。声明后,无法在接口中定义第二个方法在 java.util.function 包中定义了丰富的函数式接口

Java 内置的四大核心函数式接口

函数式接口接口类型内含抽象方法参数类型返回类型
Consumer消费型接口void accept(T t)Tvoid
Supplier供给型接口T get()T
Function函数型接口R apply(T t)TR
Predicate断定型接口boolean test(T t)Tboolean
Lambda 表达式

调用函数式接口时,使用 Lambda 表达式创建该接口的对象实例以简化代码

Walkable walkable = () -> System.out.println("走路")

->:Lambda 操作符

-> 左边:Lambda 形参列表:接口中抽象方法的形参列表

-> 右边:Lambda 体:重写的抽象方法的方法体

public class LambdaTest {
    
    @Test
    public void test1() {
        Walkable walkable = () -> System.out.println("走路");
        walkable.walk();
    }

    
    @Test
    public void test2() {
        Eatable eatable1 = (Integer i) -> System.out.println("吃了" + i + "碗米饭");
        eatable1.eat(5);

        Eatable eatable2 = d -> System.out.println("吃" + d + "碗米饭");
        eatable2.eat(5.5);
    }

    
    @Test
    public void test3() {
        Math math1 = (m1, m2) -> m1 + m2;
        System.out.println(math1.operate(5, 6));

        Math math2 = (Integer m1, Integer m2) -> {
            System.out.print(m1 + "+" + m2 + "=");
            return m1 + m2;
        };
        System.out.println(math2.operate(5, 6));

    }
}
方法引用

当要传递给 Lambda 体的操作已经有实现的方法,可以使用方法引用

方法引用可以认作 Lambda 表达式的语法糖

要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致

格式:

Comparator com = Integer :: compare;
com.compare(32,21);

三种主要使用情况

对象 :: 实例方法名类 :: 静态方法名类 :: 实例方法名

//通过对象调用实例方法
PrintStream ps = System.out;
Consumer consumer = ps::println;
consumer.accept("beijing");

//通过类调用静态方法
Comparator com = Integer :: compare;
com.compare(32,21);

//通过类调用实例方法
Comparator com = Integer :: compareTo;
构造器引用
Function function = User::new;
User tom = function.apply("tom");
System.out.println(tom);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770216.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号