zoukankan      html  css  js  c++  java
  • jdk8新特性

    一、lambda表达式

    1、lambda表达式(包含参数和方法体)

    lambda表达式可以说是匿名内部类的一种简化写法,省略了类名、方法名、类型等。

    不同点(使用区别):匿名内部类可以实现接口的多个抽象方法,lambda表达式只针对有一个抽象方法的接口

    说明:lambda表达式的参数对应抽象方法的参数,返回值对应抽象方法的返回值。(必须满足,不然没法用)

    2、函数式接口

    函数式接口就是只有一个抽象方法的接口

    3、方法引用

    方法引用可以说是lambda表达式的一种简化写法。

    不同点(使用区别):lambda表达式的方法体已经有实现的方法时,才可以用。eg: System.out::println 替代 (str) -> System.out.println(str)

    说明:

      ①方法引用所引用的方法的参数列表与返回值类型,需要与函数式接口中抽象方法的参数列表和返回值类型保持一致!格式1、2
      ②若Lambda 的参数列表的第一个参数,是实例方法的调用者,第二个参数(或无参)是实例方法的参数时,格式3: ClassName::MethodName

    3种使用格式:  

      1、对象的引用 :: 实例方法名
      2、类名 :: 静态方法名
      3、类名 :: 实例方法名

    3.2、构造器引用

    构造器的参数列表,需要与函数式接口中参数列表保持一致!

    使用格式: 类名 :: new

    3.3、数组引用

    使用格式: 类型[] :: new

    4、Stream

    是数据通道,用于操作数据源。不会存储元素,不改变源对象,操作是延迟执行的。可以执行复杂的查找、过滤、映射等操作。

    操作步骤:1. 创建 Stream  2. 中间操作 3. 终止操作(终端操作)

    4.1 、创建 Stream 

    Collection 提供了两个方法  stream() 与 parallelStream();

    通过 Arrays 中的 stream() 获取一个数组流;

    通过 Stream 类中静态方法 of();

    ......

    4.2.、中间操作

      筛选与切片
    filter(Predicate p)——接收 Lambda , 从流中排除某些元素。
    limit——截断流,使其元素不超过给定数量。
    skip(n) —— 跳过元素,返回一个扔掉了前 n 个元素的流。若流中元素不足 n 个,则返回一个空流。与 limit(n) 互补
    distinct——筛选,通过流所生成元素的 hashCode() 和 equals() 去除重复元素;

       映射
    map——接收 Lambda , 将元素转换成其他形式或提取信息。接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。
    flatMap——接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流

    map类似于add方法,flatMap类似于addAll方法

      排序

    sorted()——自然排序
    sorted(Comparator com)——定制排序

      查找与匹配

    allMatch——检查是否匹配所有元素
    anyMatch——检查是否至少匹配一个元素
    noneMatch——检查是否没有匹配的元素
    findFirst——返回第一个元素
    findAny——返回当前流中的任意元素
    count——返回流中元素的总个数
    max——返回流中最大值
    min——返回流中最小值

    4.3.、终止操作(终端操作)

    归约
    reduce(T identity, BinaryOperator) / reduce(BinaryOperator) ——可以将流中元素反复结合起来,得到一个值。

    collect——将流转换为其他形式。接收一个 Collector接口的实现,用于给Stream中元素做汇总的方法

    分组 Collectors.groupingBy(Employee::getStatus)

    分区 Collectors.partitioningBy((e) -> e.getSalary() >= 5000)  ,partitioningBy可以理解为特殊的groupingBy,key值为true和false

    二、Optional 容器类:用于尽量避免空指针异常
    * Optional.of(T t) : 创建一个 Optional 实例
    * Optional.empty() : 创建一个空的 Optional 实例
    * Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例
    * isPresent() : 判断是否包含值
    * orElse(T t) : 如果调用对象包含值,返回该值,否则返回t
    * orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值
    * map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
    * flatMap(Function mapper):与 map 类似,要求返回值必须是Optional

  • 相关阅读:
    Django +xadmin+Linux 使用Uwsgi部署xadmin后台系统
    Django+uwsgi+linux 报错: no python application found, check your startup logs for errors ---解决方案
    python程序中执行sql语句报错:columns = [col_desc[0] for col_desc in cursor.description] TypeError: 'NoneType' object is not iterable 解决方案
    配置android studio jdk要用1.8 不然会出现各种报错
    Python请求某一接口,请求头里面已经加了Cookie,但是请求之后参数返回提示:未登录,遇到这种情况解决方案
    Django 执行python3 manage.py makegrations --empty App和python3 manage.py migrate之后,数据库里面没有成功创建表解决方案
    在虚拟机VMware上安装win7时出现operating system not found报错解决方案
    将mp4格式视频转换为m3u8格式报错: Codec 'hevc' (173) is not supported by the bitstream filter 'h264_mp4toannexb'. Supported codecs are: h264 (27) 解决方案
    【.NET】Swagger 允许接口重名
    (C#) HTTP Authentication (Basic, NTLM, Digest, Negotiate/Kerberos)
  • 原文地址:https://www.cnblogs.com/xyfaneast/p/12005375.html
Copyright © 2011-2022 走看看