函数式编程

小徐 Lv1

Lambda表达式

概述

对某些匿名内部类的写法进行简化 (接口且只有一个抽象方法)

基本格式

(参数列表) -> 方法体

例如

1
2
3
4
5
6
7
 new Thread(new Runnable() {
@Override
public void run() {
System.out.println("hello lambda");
}
}).start();
new Thread(() -> System.out.println("hello lambda")).start();

使用的条件

  • 接口的匿名内部类
  • 只有一个方法

省略规则

●参数类型可以省略
●方法体只有一句代码时大括号return和唯一一句代码的分号可以省略
●方法只有一个参数时小括号可以省略

Stream流

创建流

单列集合:集合对象.stream()

数组:Arrays.stream(数组)或者使用Strem.of

双列集合:先创建单列集合

中间操作

filter

过滤

map

可以把对流中元素进行计算或者转化

distinct

去重

distinct方法是依赖Object的equals方法来判断是否是相同对象的。所以需要注意重写equals方法。

sorted

排序

注意:如果调用空参的sorted(方法,需要流中的元素是实现了Comparable

limlit

skip

跳过

flatMap

map只能把一个对象转化成另外一个对象来作为流中的元素。

而flatMap可以把一个对象转换成多个对象作为流中元素

flatMap
flatMap

终结操作

forEach

对流中的元素进行遍历操作,我们通过传入的参数去指定对遍历到的元索进行什么具体操作。

count

可以用来获取当前流中元素的个数。

max&min

Collect

把流转化成集合

anyMatch

可以用来判断是否有任意符合匹配条件的元素,结果为boolean类型。

AllMatch

可以用来判断是否都符合匹配条件,结果为boolean类型。如果都符合结果为true, 否则结果为false。

noneMatch

可以判断流中的元素是否都不符合匹配条件。如果都不符合结果为true,否则结果为false

findFirst

获取流中第一个元素

reduce归并

对流中的数据按照你指定的计算方式计算出一个结果。
reduce的作用是把stream中的元素给组合起来,我们可以传入一个初始值,它会按照我们的计算方式依次拿流中的元素和在初始化值 的基础上进行计算,计算结果再和后面的元素计算。

1
2
3
4
T resu1t = identity;
for (T element : this stream)
result = accumulator . app1y(resu1t,element)
return result;

其中identity就是我们可以通过方法参数传入的初始值,accumulator的apply具体进行什么计算也是我们通过方法参数来确定的。

一个参数的重载

1
2
3
4
5
6
7
8
9
10
11
boolean foundAny = false;
T resu1t = nu11;
for (T element : this stream) {
if (!foundany){
foundAny = true;
result = element;
}
else
result = accumulator.apply(result, element);
}
return foundAny ? optional.of(resu1t) : optional. erptyO;

Optional

概述

我们在编写代码的时候出现最多的就是空指针异常。所以在很多情况下我们需要做各种非空的判断。

optional创建对象、

Optional就好像是包装类,可以把我们的具体数据封装Optional对象内部。然后我们去使用Optional中封装好的方法操作封装进去的数据就可以非常优雅的避免空指针异常。

  • 标题: 函数式编程
  • 作者: 小徐
  • 创建于 : 2023-08-23 16:10:51
  • 更新于 : 2023-09-03 21:19:39
  • 链接: https://xiaoxua18.gitee.io/2023/08/23/函数式编程/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 评论