学习目标

  • Lambda表达式
    • 函数式思想
    • 函数式接口
    • Lambda表达式的使用前提
    • Lambda表达式的操作案例
  • Stream流
    • Stream流的优势
    • Stream流-获取功能
    • Stream流-中间功能
    • Stream流-终结功能
  • 多线程入门

    • 多线程实现的方式
    • Thread类常用功能

      1. Lambda表达式

      表达式格式:(形式参数)->{代码块}
  • 形参:若有参数用逗号隔开

  • ->:固定写法,代表指向性动作
  • 代码块:具体要做的事,即以前我们写的方法体内容(函数式接口抽象方法的重写 )

    1.1 Lambda表达式的优势 ?

  1. 简洁。
  2. 非常容易并行计算。

    2.2 Lambda表达式使用前提 ?

    Lambda表达式使用前提:只能操作函数式接口

    2.2 Lambda表达式和匿名内部类的区别 ?

    |
    | Lambda表达式 | 匿名内部类 | | —- | —- | —- | | 类型 | 函数式接口 | 接口、抽象类和具体类 | | 限制 | 接口仅有一个抽象方法需重写 | 接口有一个或多个抽象方法需重写 | | 原理 | 编译之后,没有一个单独的.class字节码文件。对应的字节码会在运行的时候动态生成 | 编译之后,产生一个单独的.class字节码文件 |

2. Stream流

2.1 Stream流存在的优势 , 什么时候使用Stream流 ?

  1. 优势:
  • 增强集合操作;
  • 充分利用Lambda;
  • 执行效率的提高 - 透明(支持多线程集合操作)。
  1. 使用场景:当需要对单列集合、双列集合、数组中的数据进行过滤、截取、去重、排序等操作时,可以通过Stream流快速实现。
  2. 操作
  • 获取Stream流:创建一条流水线,并把数据放到流水线上准备进行操作
  • 终结操作:一个Stream流只能有一个终结方法;②是流水线上的最后一个操作。

    • void forEach(Consumer action):对此流的每个元素执行操作

      1. Consumer接口中的方法 void accept(T t):对给定的参数执行此操作
    • long count():返回此流中的元素数

  • 中间操作:①流水线上的操作;②一次操作完毕之后,还可以继续进行其他操作。

    • Stream filter(Predicate predicate):用于对流中的数据进行过滤

      1. Predicate接口中的方法 : boolean test(T t):对给定的参数进行判断,返回一个布尔值
    • Stream limit(long maxSize):截取指定参数个数的数据

    • Stream skip(long n):跳过指定参数个数的数据
    • static Stream concat(Stream a, Stream b):合并a和b两个流为一个流
    • Stream distinct():去除流中重复的元素。依赖(hashCode和equals方法)
    • Stream sorted () : 将流中元素按照自然排序的规则排序
    • Stream sorted (Comparator<? super T> comparator) : 将流中元素按照自定义比较器规则排序

      2.2 Stream流的获取方法?

  1. 单列集合:可以使用Collection接口中的默认方法stream()生成流(default Stream stream());
  2. 双列集合间接的生成流,可以先通过keySet或者entrySet获取一个Set集合,再获取Stream流;
  3. 数组:Arrays中的静态方法stream 生成流;
  4. 多个数据:Steam类中的静态方法(public static Stream of(T … t);)。

    2.3 Stream流中常用API有哪些 ?

    | 方法名称 | 方法作用 | 方法种类 | 是否支持链式调用 | | —- | —- | —- | —- | | count | 统计个数 | 终结方法 | 否 | | forEach | 逐一处理 | 终结方法 | 否 | | filter | 过滤 | 函数拼接 | 是 | | limit | 取用前几个 | 函数拼接 | 是 | | skip | 跳过前几个 | 函数拼接 | 是 | | map | 映射 | 函数拼接 | 是 | | concat | 组合 | 函数拼接 | 是 |

3. 多线程实现的方式

3.1 多线程实现方式区别 ?

实现方式 优点 缺点
继承Thread类 代码实现方式比较简单,可以直接使用Thread类中功能 扩展性较差,只能继承Thread类,任务执行完毕没有返回值结果,有异常只能捕获
实现Runnable接口 代码实现方式比较简单,扩展性较强因为还可以继承其他的类 不能直接使用Thread类中的功能,任务执行完毕没有返回值结果,有异常只能捕获
实现Callable接口 展性较强因为还可以继承其他的类,任务执行完毕会有一个返回值结果,如任务中出现 实现太过复杂,不能直按使用Thread类中的功能
  1. 当日问题小结
    4.1 当日遇到的问题

4.2 出现问题原因

4.3 解决问题方案