21-Java1.8新特性

2022-07-31,

一,函数式编程思想

1.1 概念

在数学中,函数就是一套计算方案。它重点放在 “ 拿什么东西就能做什么事情 ”。

对于面向对象的编程思想而言,我们必须明确是哪一个对象来做这件事情的,

而函数式编程思想的重点是 “ 做什么,不是以什么形式来做 。”

1.2 函数式编程思想和面向对象思想比较案例

new Thread(new Runnable(){
    @Override
    public void run() {
        for(int i = 1;i <= 100; i++){
            System.out.println(Thread.currentThread().getName() +"---"+i);
        }
    }
}).start();


new Thread(() -> {
    for(int i = 1;i <= 100; i++){
        System.out.println(Thread.currentThread().getName() +"---"+i);
    }
}).start();

如果要使用实现 Runnable 接口的方式开启线程,我们必须创建出 Runnable 的实现类对象,并重写 run() 方法明确线程中要执行的任务。我们的重点是开启线程,让线程执行指定的任务,而不是创建 Runnable 的实现类对象也不是去重写 run() 方法。实际上,只有 run() 方法中的方法体才有重点。

1.3 Lambda表达式的语法

组成:

  1. 参数列表
  2. 箭头
  3. 代码块

格式:

(参数列表)-> { 代码块 }

格式说明:

  1. ():表示接口中抽象方法的参数列表;方法没有参数的话就留空,有的话就跟着接口中的这个方法的参数列表来写。
  2. ->:传递的意思,把参数传递给方法体
  3. {}:重写接口抽象方法的方法体

Lambda表达式中可以省略的内容:

  1. 参数列表中的类型
  2. 如果参数只有一个,那么连 " () "也能省略,此时 " () " 省略情况下,类型一定不能写
  3. 如果 " {} " 中只有一行代码,
    1. 重写的方法没有返回值:可以省略 " {} " ,此时该语句的分号必须省略
    2. 重写的方法有返回值:可以省略 " {} ",此时 " reuturn " 和 分号 必须省略

Lambda 的使用前提:

  1. 使用 Lambda 表达式必须要有接口,接口中有且只能有一个抽象方法,默认的方法、静态的方法、私有方法也可以包含。
  2. 方法的参数必须是函数式接口,才能使用 Lambda 作为该接口的实例

函数式接口:有且仅有一个抽象方法的接口,可以通过 @FunctionalInterface 注解来校验该接口是否的函数式接口

1.4 常见的函数式接口

1.4.1 Supplier

该接口中有一个无参的抽象方法:T get()

它用来获取一个泛型参数指定的数据类型的对象

1.4.2 Predicate

该接口中有一个无参的抽象方法:boolean test(T t),两个默认方法:and() 、or()

它用来判断是否满足条件

本文地址:https://blog.csdn.net/zhu_fangyuan/article/details/107660755

《21-Java1.8新特性.doc》

下载本文的Word格式文档,以方便收藏与打印。