设为首页 加入收藏

TOP

SpringBoot(五) - Java8 新特性(一)
2023-07-25 21:24:11 】 浏览:140
Tags:SpringBoot Java8

1、Lambda表达式

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

1.1 语法组成

  1. 操作符为" -> " ,被称为 Lambda 操作符或箭头操作符;
  2. 将 Lambda 分为两个部分:
    1. 左侧:指定了 Lambda 表达式需要的参数列表
    2. 右侧:指定了 Lambda 体,是抽象方法的实现逻辑,也即Lambda 表达式要执行的功能。

1.2 基本用法

1.2.1 未使用和使用Lambda表达式的区别

@Slf4j
public class TestLambda {
    
    //未使用和使用lambda表达式,对比
    static void testRunLambdaContrast(){
        // 不使用lambda表达式,创建一个线程
        Runnable runnable1 = new Runnable() {
            @Override
            public void run() {
                log.info("------ 不使用lambda表达式,创建一个线程 ------");
            }
        };
        // 启动线程
        new Thread(runnable1).start();

        // 使用lambda表达式,创建一个线程
        Runnable runnable2 = () -> log.info("------ 使用lambda表达式,创建一个线程 ------");
        // 启动线程2
        new Thread(runnable2).start();
    }
    
    public static void main(String[] args) {
        
        //测试 未使用和使用lambda表达式,对比
        testRunLambdaContrast();
        
    }
    
}

总结:未使用和使用Lambda表达式都可以实现抽象方法,但是使用Lambda方法后会更加简洁;

1.2.2 带一个参数没有返回值

1.2.2.1 带一个参数没有返回值 标准写法
// 借助java8中 消费型函数式接口,讲解基本用法
// 不使用lambda表达式实现
Consumer<String> consumer1 = new Consumer<String>() {
    @Override
    public void accept(String s) {
        log.info("------ 不使用lambda表达式,实现Consumer1接口,消费数据:{} ------",s);
    }
};

// 使用消费型接口1
consumer1.accept("kh96正在学习lambda表达式,标准写法");

// 使用lambda表达式,用法:带 1 个参数,没有返回值,标准写法
Consumer<String> consumer2 = (String s) -> {
    log.info("------ 使用lambda表达式,实现Consumer2接口,消费数据:{} ------",s);
};

// 使用消费型接口2
consumer2.accept("kh96正在学习lambda表达式,标准写法");
1.2.2.2 简化写法:一个参数,可以省略类型声明
//一个参数,可以省略类型声明
Consumer<String> consumer3 = (s) -> {
    log.info("------ 使用lambda表达式,实现Consumer3接口,消费数据:{} ------",s);
};

consumer3.accept("kh96正在学习lambda表达式,一个参数,可以省略类型声明");
1.2.2.3 简化写法:一个参数,可以省略小括号(没有参数,多个参数不能省略)
//一个参数,可以省略小括号(没有参数,多个参数不能省略)
Consumer<String> consumer4 = s -> {
    log.info("------ 使用lambda表达式,实现Consumer4接口,消费数据:{} ------",s);
};

consumer4.accept("kh96正在学习lambda表达式,一个参数,可以省略小括号");
1.2.2.4 简化写法:实现只有一条语句,可以省略大括号(有多条语句,不可以省略)
//实现只有一条语句,可以省略大括号(有多条语句,不可以省略)
Consumer<String> consumer5 = s -> log.info("------ 使用lambda表达式,实现Consumer3接口,消费数据:{} ------",s);

consumer5.accept("kh96正在学习lambda表达式,实现只有一条语句,可以省略大括号");
1.2.2.5 简化写法:实现有多条语句,不可以省略大括号
//实现有多条语句,不可以省略大括号
Consumer<String> consumer6 = s -> {
    log.info("------ 使用lambda表达式,实现Consumer3接口,消费数据:{} ------",s);
    log.info("------ 使用lambda表达式,实现Consumer3接口,消费数据:{} ------",s);
};

consumer6.accept("kh96正在学习lambda表达式,实现有多条语句,不可以省略大括号");

1.2.3 带多个参数,有返回值

1.2.3.1 未使用 lambda 表达式,用法:带多个参数,有返回值
// 借助Comparator接口,讲解多个参数
Comparator<Integer> comparator1 = new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1.compareTo(o2);
    }
};

// 未使用lambda表达式,用法:带多个参数,有返回值
log.info("------ 不使用lambda表达式,实现Comparator接口,比较12,23的大小:{} ------",comparator1.compare(12,23));// 小于 -1,大于 1,等于 0

1.2.3.2 简化写法:省略参数类型,但是不可以省略小括号,一条语句省略大括号,跟返回值无关(不用手动加return)
//省略参数类型,但是不可以省略小括号,一条语句省略大括号,跟返回值无关(不用手动加return)
Comparator<Integer> comparator2 = (o1,o2) -> o1.compareTo(o2);

log.info("------ 使用lambda表达式,实现Comparator
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/11/11
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java I/O(1):模型与流 下一篇java设计模式【抽象工厂模式】

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目