Java 基础入门 | 第二十章 Java Lambda 表达式

目录

简介

语法

函数式编程接口

方法引用


简介

Lambda 表达式,Java 8 发布的最重要新特性。

Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

使用 Lambda 表达式可以使代码变的更加简洁紧凑。

语法

lambda 表达式的语法格式如下:

(parameters) ->{ statements; }

parameters 为方法参数(可以是无也可以是多个);statements 为方法实现内容;

使用Labmda表达式需要函数式编程接口,比如在Runnable接口上我们可以看到@FunctionalInterface注解(标记着这个接口只有一个抽象方法) ,如果自己创建接口,也可以不用此注解,只要保证抽象方法只有一个即可!

代码示例

public class Test {
    public static void main(String[] args) {
        Runnable runnable=()-> System.out.println("洛阳泰山!how are you?");
        runnable.run();
    }
}

控制台输出

 代码示例

正常声明一个线程代码

// 用匿名内部类的方式来创建线程
    new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("我是洛阳泰山 记得关注我哦!");
        }
    }).start();

 用Lambda语法简化后

 // 使用Lambda来创建线程
 new Thread(() -> System.out.println("我是洛阳泰山 记得关注我哦!")).start();

Thread的构造器 

 由此可见 () -> System.out.println("我是洛阳泰山 记得关注我哦!")  等效与 Runnable target的实例。

函数式编程接口

从上面的代码例子可以看出,我们使用Lambda表达式创建线程的时候,并不关心接口名,方法名,参数名。我们只关注他的参数类型,参数个数,返回值

JDK原生就给我们提供了一些函数式编程接口方便我们去使用,下面是一些常用的接口:

名称接口说明
一般函数
Function
一元函数,抽象apply方法
算子函数(输入输出同类型)
UnaryOperator
一元算子,抽象apply方法
谓词函数(输出boolean)
Predicate
一元谓词,抽象test方法
消费者(无返回值)
Consumer

一元消费者函数,抽象accept方法

供应者(无参数只有返回值)
Supplier
无元供应者函数,抽象get方法

简单说明一下:

  • 无元表示无参数,一元表示只有一个入参,二元表示有两个入参。

二元接口示例

 代码示例

Function和 Consumer 的使用示例可以参考之前的文章

Java web 大数据量数据库操作批处理工具类_李泰山的博客-CSDN博客前言当操作大量数据的时候往往需要分批次去处理,以减少内存和i/o的压力,比如用mybatis-plus,添加、修改、查询大量数据时候,会造成数据库压力太大,导致服务异常,还有在执行sql 的in 方法时候,参数不能大于1000个等问题,都需要进行批量处理。下面整理一个BatchUtil 批处理工具类,很好的解决以上的问题。工具类代码import java.util.*;import java.util.function.Consumer;import java.util.fun..https://tarzan.blog.csdn.net/article/details/123666105


import java.util.function.*;

public class Test {
    public static void main(String args[]){
        // Supplier 无入参,有返回值
        Supplier<String> supplier = () -> "洛阳泰山";
        String s = supplier.get();
        System.out.println(s);
    }
}

使用Lambda时,要记住的就两点:

  1. Lambda返回的是接口的实例对象
  2. 有没有参数、参数有多少个、需不需要有返回值、返回值的类型是什么---->选择自己合适的函数式接口

方法引用

在学Lambda的时候,还可能会发现一种比较奇怪的写法,例如下面的代码:

// 方法引用写法
Consumer<String> consumer = System.out::println;
consumer.accept("洛阳泰山");

和下面代码等效

// 普通的Lambda写法
Consumer<String> consumer = s -> System.out.println(s);
consumer.accept("洛阳泰山");

  System.out::println 相当于调用了PrintStream类 (System.out)的println方法

方法引用又分了几种:

  • 静态方法的方法引用
  • 非静态方法的方法引用
  • 构造函数的方法引用

代码示例

import java.util.function.*;

public class Test {
    public static void main(String args[]){
            // 静态方法引用--通过类名调用
            Consumer<String> consumerStatic = Test::say;
            consumerStatic.accept("输出静态方法!");

            //实例方法引用--通过实例调用
            Test test = new Test();
            Consumer<String> consumer = test::eat;
            consumer.accept("输出实例方法!");

            // 构造方法方法引用--无参数
            Supplier<Test> supplier = Test::new;
            System.out.println(supplier.get());
    }

    // 静态方法
    public static void say(String name) {
        System.out.println(name);
    }

    // 实例方法
    public void eat(String name) {
        System.out.println(name);
    }

}

 如果你想更深入的学习lambda的,可以研究下jdk lambda相关的源码是怎么写的,也可百度更多lambda相关的文章,也可持续关注我,后续更新lambda相关的文章知识内容!

上一章《Java 基础入门 | 第十九章 IDEA编辑器快捷操作教程》icon-default.png?t=M276https://tarzan.blog.csdn.net/article/details/123974617 下一章《Java 基础入门 | 第二十一章 Java stream操作》icon-default.png?t=M276https://tarzan.blog.csdn.net/article/details/124082805

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泰山AI

原创不易,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值