Java8新特性

1.Lambda表达式

>语法

左侧: 指定了Lambda表达式需要的参数列表

右侧: 制定了Lambda体,是抽象方法的实现逻辑,即Lambda表达式要执行的功能

>语法格式

1)无参,无返回值

2)需要一个参数,但没有返回值

3)数据类型可以省略

4)Lambda若只需要传入一个参数时,参数的小括号可以省略

5)Lambda若需要传入两个或以上的参数,多条执行语句,并且可以有返回值

6)但Lambda体只有一条语句时,return与大括号若有,都可以省略

2.函数式接口

>什么是函数式接口?

• 只包含一个抽象方法(Single Abstract Method,简称 SAM)的接口,称为函数式接
口。当然该接口可以包含其他非抽象方法。
• 你可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda 表达式抛出一个受
检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明)。
•
我们可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检查它是
否是一个函数式接口。同时 javadoc 也会包含一条声明,说明这个接口是一个函数
式接口。
• 在 java.util.function 包下定义了 Java 8 的丰富的函数式接口

>如何理解函数式接口?

• 面向对象的思想:
做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情。
• 函数式编程思想:只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重
视过程。
• 在函数式编程语言当中,函数被当做一等公民对待。在将函数作为一等公民的编程语
言中,Lambda 表达式的类型是函数。但是在 Java8 中,有所不同。在 Java8 中,
Lambda 表达式是对象,而不是函数,它们必须依附于一类特别的对象类型------函数
式接口。
• 简单的说,在 Java8 中,Lambda 表达式就是一个函数式接口的实例。这就是 Lambda
表达式和函数式接口的关系。也就是说,只要一个对象是函数式接口的实例,那么该
对象就可以用 Lambda 表达式来表示。

>举例

>四大核心函数式接口

1)消费型接口 Consumer<T> 对类型为T的对象应用操作,包含方法: void accept(T t)

消费型接口的特点: 有形参,但是返回值类型是void

2)供给型接口 Supplier<T> 返回类型为T的对象,包含方法: T get()

供给型接口的特点; 无参,但是有返回值

3)函数型接口 Function<T,R> 对类型为T的对象应用操作,并返回结果,结果类型时R类型的对象,包含方法: R apply(T t)

函数型接口的特点: 既有参数又有返回值

4)判断型接口 Predicate<T> 确定类型为T的对象是否满足约束,并返回boolean值,包含方法: boolean test(T t)

判断型接口的特点: 有参,但是返回值类型是boolean型

3.Stream API

>说明

• Stream API ( java.util.stream) 把真正的函数式编程风格引入到 Java 中。这是目前为止
对 Java 类库 最好的补充 ,因为 Stream API 可以极大提供 Java 程序员的生产力,让程
序员写出高效率、干净、简洁的代码。
• Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操
作,可以执行非常复杂的查找、过滤和映射数据等操作。 使用 Stream API 对集合
数据进行操作,就类似于使用 SQL 执行的数据库查询。 也可以使用 Stream API 来
并行执行操作。简言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

>Stream操作的三个步骤

1)创建Stream

一个数据源(如集合,数组),获取一个流

2)中间操作

每次处理都会返回一个持有结果的新Stream,即中间操作的方法返回值仍然是Stream类型的对象,因此中间操作可以是一个操作链,可以对数据源的数据进行n次处理,但是在终止操作前,并不会真正执行

3)终止操作

终止操作的方法返回值就不再是Stream了,因此一旦执行终止操作,就结束真个Stream操作了,一旦执行终止操作,就执行中间操作链,最终产生结果并结束Stream

>一系列中间操作

相关推荐
逃逸线LOF7 分钟前
服务网关Gateway
java·运维·gateway
Funlang25 分钟前
给机器写的 JavaScript 造个笼子
开发语言·javascript·ecmascript
普通人629 分钟前
PHP文件读写完全指南
开发语言·php·1024程序员节
灿飞屋33 分钟前
Kotlin与Java虚拟机四:函数
java·python·kotlin·安卓·android jetpack
坤坤子吖1 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
阡陌数智1 小时前
Claude API新版本重大变更与安全升级指南
java·linux·安全
一晌小贪欢2 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
xiaoye-duck2 小时前
《C++ 项目:手写大模型接入 SDK》LLMManager架构设计与实现
开发语言·网络·c++·语言模型
一条大祥脚3 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
学长毕设3 小时前
基于SpringBoot的野生动物公益保护平台设计与实现-附源码
java·spring boot·后端