(lambda和Stream流)day14javaSE基础查漏补缺

1.lambda表达式,前提:只能简化函数式接口的匿名内部类

(参数列表)—>{方法体}

2.函数式接口:只允许有一个抽象方法,其他的方法不管

3.lambda表达式,编译的时候,它咋知道我是实现的哪一个接口?

在方法中被写死了

public static void sort(T[] a, Comparator c)

像这个一样,sort方法只能传递Comparator接口的实现类对象,方法已经写死了

4.lambda表达式是一个对象

5.lambda表达式和匿名内部类区别(1并不是2的语法糖)

1)所需的类型不一样

如果是匿名内部类,那么可以用接口,也可以用抽象类,甚至可以是普通的实体类

如果是lambda表达式,就只能用接口

2)使用的限制不一样

如果接口当中有且只有一个抽象方法时,那么可以使用lambda表达式,也可以使用匿名内部类

但是如果接口当中抽象方法不唯一时,那么就只能使用匿名内部类,不能使用lambda表达式

3)实现的原理不一样

匿名内部类:其实本身就是一个类,编译之后,直接产生一个单独的.class字节码文件

lambda表达式:编译之后,没有单独的.calss字节码文件,对应的字节码文件会在运行的时候生成(效率提高)

4.{return ;}要省略就一起省略

5.lambda什么时候用啊?

1)lambda:简化多线程匿名内部类

2)Stream流:使用Lambda

3)看源码的时候

6.lambda不能抛异常,只能在方法中trycatch。

7.Stream只能用一次,用完就会被销毁,每一步都会生成新的Stream流对象。

要想操作流,首先需要有一个数据源,可以是数组或者集合。每次操作都会返回一个新的流对象,方便进行链式操作,但原有的流对象会保持不变

Stream.of()—可变参数测数组类型必须是包装类。

否则Stream.of(int[] arr = {1,2,3,4})—数组作为可变参数的一个参数

8.Stream线程不安全

9.foreach:输出有序

10.把stream流对象转换为List:

List list = stream.collect(Collectors.toList());

11.while和for循环写在代码块里面和外面有区别么

里边:获取一次锁

外部:每次循环都必须从新获取锁

12.stream流在效率上比传统的for 和foreach循环效率高。

在串行处理操作中,Stream 在执行每一步中间操作时,并不会做实际的数据操作处理,而是将这些中间操作串联起来,最终由终结操作触发,生成一个数据处理链表,通过 Java8 中的 Spliterator 迭代器进行数据处理;此时,每执行一次迭代,就对所有的无状态的中间操作进行数据处理,而对有状态的中间操作,就需要迭代处理完所有的数据,再进行处理操作;最后就是进行终结操作的数据处理。

在并行处理操作中,Stream 对中间操作基本跟串行处理方式是一样的,但在终结操作中,Stream 将结合 ForkJoin 框架对集合进行切片处理,ForkJoin 框架将每个切片的处理结果 Join 合并起来。最后就是要注意 Stream 的使用场景。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值