系列四、Java8的Lambda表达式

news/2024/5/20 10:05:19 标签: JUC

一、概述

        Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

        Lambda 表达式在Java 语言中引入了一个新的语法元素和操作符。这个操作符为 "→" , 该操作符被称为 Lambda 操作符或箭头操作符。它将 Lambda 分为两个部分:
        左侧:指定了 Lambda 表达式需要的所有参数
        右侧:指定了 Lambda 体,即 Lambda 表达式要执行的功能

二、函数式接口

2.1、概览图

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

2.3、四大函数式接口案例代码

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/21 9:52
 * @Description: 函数式接口
 */
public class FunctionMainApp {

    public static void main(String[] args) {
        /**
         * R apply(T t):函数型接口,一个参数一个返回值
         */
        Function<String,Integer> function = t -> {return t.length();};
        System.out.println(function.apply("Hello!"));

        /**
         * boolean test(T t):断定型接口,一个参数,返回boolean
         */
        Predicate<String> predicate = t -> {return t.startsWith("H");};
        System.out.println(predicate.test("Hello World!"));

        /**
         * void accept(T t):消费型接口,一个参数,没有返回值
         */
        Consumer<String> consumer = t -> {System.out.println(t);};
        consumer.accept("Hello Function!");

        /**
         * T get():供给型接口,无参数,有返回值
         */
        Supplier<String> supplier = () -> {return UUID.randomUUID().toString();};
        System.out.println(supplier.get());
    }

}

三、自定义函数式接口案例

3.1、定义函数式接口 

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/20 10:14
 * @Description: 定义函数式接口
 */
@FunctionalInterface
public interface LambdaCalculator {
    /**
     * 加
     *
     * @param x
     * @param y
     * @return
     */
    public int add(int x, int y);

    /**
     * 减
     *
     * @param x
     * @param y
     * @return
     */
    default int sub(int x, int y) {
        return x - y;
    }

    /**
     * 乘
     *
     * @param x
     * @param y
     * @return
     */
    default int mul(int x, int y) {
        return x * y;
    }

    /**
     * 除
     * @param x
     * @param y
     * @return
     */
    public static int div(int x, int y) {
        return x / y;
    }
}

3.2、使用函数式接口

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/20 10:18
 * @Description: 函数式编程
 * 口诀:
 * 1、拷贝小括号(形参列表),写死右箭头 ->,落地大括号 {方法实现}
 * 2、有且只有一个public方法,@FunctionalInterface注解增强定义
 * 3、default方法默认实现
 * 4、静态方法实现
 */
public class LambdaCalculatorMainApp {

    public static void main(String[] args) {
        LambdaCalculator calculator = (x, y) -> {
            System.out.println("Hello Lambda!");

            return x + y;
        };

        System.out.println("=========> add:" + calculator.add(6, 2));
        System.out.println("=========> sub:" + calculator.sub(6, 2));
        System.out.println("=========> mul:" + calculator.mul(6, 2));
        System.out.println("=========> div:" + LambdaCalculator.div(6, 2));
    }

}

3.3、结果

四、小总结

4.1、定义函数式接口

1、类型为接口

2、有且只有一个public方法,@FunctionalInterface注解增强定义

3、default方法默认实现

4、静态方法实现

思考:Runnable接口为什么可以使用Lambda表达式?

4.2、Lambda表达式使用口诀

拷贝小括号(),写死右箭头→,落地大括号{…}


http://www.niftyadmin.cn/n/5202260.html

相关文章

从0开始学习JavaScript--JavaScript类型化数组进阶

前面的文章&#xff0c;已经介绍了JavaScript类型化数组的基本概念、常见类型和基本操作。在本文中&#xff0c;我们将深入探讨类型化数组的一些进阶特性&#xff0c;包括共享内存、大端小端字节序、以及类型化数组与普通数组之间的转换&#xff0c;通过更丰富的示例代码&#…

Linux socket编程(5):三次握手和四次挥手分析和SIGPIPE信号的处理

在我之前写的Wireshark抓包&#xff1a;理解TCP三次握手和四次挥手过程中&#xff0c;通过抓包分析了TCP传输的三次握手和四次挥手的过程。在这一节中&#xff0c;将分析在Linux中的三次握手和四次挥手的状态和过程&#xff0c;另外还有一个在我们编程过程中值得注意的SIGPIPE信…

openssl+ SM2 + linux 签名开发实例(C++)

文章目录 一、SM2 签名理论基础二、SM2签名开发实例 一、SM2 签名理论基础 SM2是中国国家密码管理局发布的椭圆曲线密码算法标准&#xff0c;用于数字签名、密钥交换和公钥加密等安全通信场景。以下是SM2签名的理论基础相关知识点&#xff1a; 椭圆曲线密码学&#xff08;Elli…

Flutter:多线程Isolate的简单使用

在flutter中如果要使用线程&#xff0c;需要借助Isolate来实现。 简介 在Flutter中&#xff0c;Isolate是一种轻量级的线程解决方案&#xff0c;用于在应用程序中执行并发任务。Isolate可以被认为是独立于主线程的工作单元&#xff0c;它们可以在后台执行任务而不会阻塞应用程…

LeetCode算法心得——爬楼梯(记忆化搜索)

大家好&#xff0c;我是晴天学长&#xff0c;第二个记忆化搜索练习&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1&#xff09;爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或…

Python Turtle Graphics 绘制I Love You字符

1.1引言&#xff1a; Python的turtle模块是一个非常有趣且强大的工具&#xff0c;它允许我们以一个可视化和互动的方式学习编程。通过调用各种命令&#xff0c;我们可以引导turtle画出一个指定的图形。在本博客中&#xff0c;我们将使用turtle模块来绘制一个复杂的图形。 1.2实…

智能座舱架构与芯片- (15) 测试篇 下

三、持续集成与交付 3.1 自动化编译框架 在智能座舱软件中&#xff0c;分为上层应用软件和底层软件。有些上层应用软件是与指令集平台无关的&#xff0c;例如Java应用程序等&#xff0c;它们对所运行的CPU平台没有依赖性&#xff0c;可以很好的适配当前平台进行执行。而在底层…

【计算机网络笔记】路由算法之距离向量路由算法

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…