2022-2-20stream流的复习

  • lambda表达式
- jdk8的新特性 lambda表达式可以代替匿名内部类
- 将一块代码赋值给一个变量 就是将一个内部类赋值给一个变量
- 结构 1 方法的修饰符是多余的 public 2 函数的名字是多余的 返回值的类型就已经知道了是什么方法了 3 返回值类型不用写 编译器会自己判断 
4 参数类型不用写 编译器可以自己判断 5 方法体的大括号不用写 有一行代码不用写 并且没有返回值不用,5 参数和方法体之间用箭头符号
(参数)->{方法体}  只有一个参数时不需要括号, 
- 所有的lambda类型都是接口类型,lambda本身就是接口方法的实现,
显示接口的方式有几种 1 implements 实现接口 重写里面的方法 2 new 接口进行内部类 3 函数式接口可以用lambda表达式来实现
- 函数式接口 
lambda表达式只能实现函数式接口的方法 
@Functionanlinterface这个注解在接口标注就是函数式接口,里面只有一个抽象方法需要实现,被default修饰的抽象方法会默认实现.
 - lambda表达式的引用方法
 1 lambda表达式可以指向一个已近实现的方法 普通方法用对象来调用 格式 对象:: 普通方法
 静态方法用类名来调用  类:: 静态方法
- 集合中常用到的函数式接口 
1 遍历集合: forEach(Consumer action) action是一个抽象方法 Consumer是一个函数式接口 用一个lambda表达式来调用已经实现action方法的方法
forEach(System.out::pirintln)
2 删除集合中的元素: 通过removeif(predicate filter)方法来删除集合中的一个元素 Predicate是jdk中的函数接口,
list.removeif(s->"s".equals(s)) 这个样就是使用predicate中filter方法来进行过滤 
- 闭包就是代码片段的引用
- stream流的创建
1 数组创建 Arrays.stream(arr[])
2 集合创建 list.stream()
- stream的操作分为是中间操作和终端操作
1 中间操作 每次操作返回一个新的流 
2 终端操作 每一个流只能进行一次终端操作 产生新的一个流
- stream特性
1 不会存储数据
2 不会改变数据源
3 有延迟性 只有调用终端操作中间操作才会执行
- Optinal 类
这个类可以存放null对象的容器,通过isPresent()方法返回true就不是空调用get()来返回该对象,
- stream对集合的操作
1 filter(s->s>0).forEach() 遍历出符合条件的数据 
2 count()  max() min()
3 映射map 接收一个函数 对每一个流元素进行操作, flatmap和map一样结果 但是flat是并行
4 reduce 求最大值和最小值 求和 求乘积 
5 collect 收集 将一个流进行收集起来,最终收集成一个新的集合, 归集: tolist toset tomap 
6 collectors中数据计算的静态方法: 计数 count 最值 求和 
7 集合分组 grouping by 
8 连接 joining 
- 流的操作
1 distinct 去重
2 skip 跳过
3 limt 分页 
iterate(开始值,操作);




你可能感兴趣的:(苦练基本功,java,开发语言,后端)