JDK8主要新特性介绍(二)

2023-10-30

1.6  类库新特性

       java.util.stream 类库包新特性

       ●java.util.Optional 类新特性

       ●java.util.Base64 类新特性

       ●Java.time 类新特性

       ●其它常用类新增特性

       ●HashMap类性能提升

1.6.1 java.util.stream 类库包新特性
Stream流的特性
           定 义:支持数据处理操作的源生成的元素序列。它并非是数据结构,也不是容器,而是一个过程.
 引入的原因:1.声明性方式处理数据集合   2.透明地并行处理,提高性能
     重要特点:1. 内部迭代                           2. 数据流(类似管道)传输

Stream数据类型

              

Stream流操作的分类:
         1.中间操作:可以连接起来的流操作
         2.终端操作:关闭流的操作,触发流水线执行并关闭它。
特        点:一个流的操作,没有终端操作 ,则该流中的任何中间操作操作都不会执行。

              

Stream流的使用:
          一个数据源(如源集合)来执行一个操作(如映射).
          一个中间操作链(如筛选),形成一条流的流水线.
          一个终端操作(如归约),执行流水线,并能生成结果.

         

流的构建:

         

 Stream流典型的接口方法:

      1 filter  (Predicate<? super T> predicate); 用于过滤、筛选   2  distinct(); 去重  [会依赖hasCode和equals]

                          

        3 map (Function<? super T ,  ? extends R> mapper);
           * 对于Stream中包含的元素使用给定的转换函数进行转换操作,把所有的返回值组成新的流。
           * 传入User对象(User流),提取里面的所有name属性,转换为一个Strea,的流
           * 新生成的Stream只包含转换生成的元素。

             

  Stream 流 - 收集数据:

        对流调用 collect 方法将对流中的元素触发归约操作(由 Collector 来参数化), 将流中的元素累计成一个汇总结果。Collectors 实用类提供了许多静态工厂方法,用来创建常见收集器的实例.
       Collectors.toList() 返回类型List<T> ,把流中的所有项目收集到一个List。
       Collectors.toSet() 返回类型Set<T>, 把流中的所有项目收集到一个Set。
       Collectors.toCollection(Supplier collecttionFactory)返回类型Collection<T>, 把流中的所有项目收集到给定的供应源创建的集合。
       Collectors.counting()方法返回的收集器,查看集合数量.如:menu.stream().collect(counting());
       Collectors.maxBy(Comparator<? super T> comparator) 根据比较器,获取最大值;
             如:userLists.stream().collect(maxBy(Comparator.comparing(User::getAge)));
       Collectors.minBy(Comparator<? super T> comparator) 根据比较器,获取最小值;
       Collectors.summingInt/summingDouble/summingLong() 汇总对象映射为求和的int/Double/Long函数;
             如:userLists.stream().collect(summingInt(User::getAge));
       Collectors.averagingInt/averagingDouble/averagingLong() 汇总对象映射为平均值的int/Double/Long函数;
             如:userLists.stream().collect(averagingInt(User::getAge));
        Collectors.joining()返回的收集器会把对流中的每一个对象应用toString()后连接成一个字符串,内部使用StringBuilder;重载:参数是分隔符. 如:userLists.stream().map(User::getAge).collect(joining(","));

      

  Stream并行流:

             

1.6.2 java.util.Optional 类新特性

       Optional被定义为一个简单的容器,其值可能是null或者不是null,Java 8之前一般某个函数应该返回非空对象但是偶尔却可能返回了null,而在Java 8 以后,不推荐你返回null而是返回Optional。

        java.util.Optional<T>,对可能缺失的值建模.引入的目的并非是要消除每一个 null引用,而是帮助你更好地设计出普适的 API.

 Optional的优点
       1)显式的提醒你需要关注null的情况,对程序员是一种字面上的约束
       2)将平时的一些显式的防御性检测给标准化了,并提供一些可串联操作
       3)解决null会导致疑惑的概念

Optional对象的创建
      empty()          声明一个空的Optional,eg:Optional<User> optU =  Optional. empty();
      of(T value)     为非null的值创建一个Optional.通过工厂方法创建Optional类。创建对象时传入的参数不能为nul,如果为null,则抛出NullPointerException.
      ofNullable(T value)  为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional,可以接受参数为null的情况。

常用 方法
      isPresent()     如果值存在返回true,否则返回false。
      get()              如果Optional有值则将其返回,否则抛出异常 NoSuchElementException。
      ifPresent(Consumer<? super T> consumer) 如果Optional实例有值则为其调用consumer,否则不做处理
      orElse(T other) 如果Optional实例有值则将其返回,否则返回orElse方法传入的参数。即参数other为默认返回值,eg:myValue.orElse("传入的参数value!")
      orElseGet(Supplier<? extends T> other) 如果Optional实例有值则将其返回,否则调用other Lambda的get方法返回默认值,eg:myValue.orElseGet(() -> "Default Value")
      orElseThrow(Supplier<? extends X> exceptionSupplier)如果有值则将其返回,否则抛出supplier接口创建的异常。eg:

public static void main(String[] args) {
    try { //orElseThrow与orElse方法类似。与返回默认值不同,
          //orElseThrow会抛出lambda表达式或方法生成的异常
          empty.orElseThrow(ValueAbsentException::new);
         } catch (Throwable ex) {
           //输出: No value present in the Optional instance
           System.out.println(ex.getMessage());
     }
}

class ValueAbsentException extends Throwable {
    public ValueAbsentException() {super();}
    public ValueAbsentException(String msg) {super(msg); }
    @Override
    public String getMessage() {
       return "No value present in the Optional instance"; 
    }
}

    map(Function<? super T,? extends U> mapper)  如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。map方法用来对Optional实例的值执行一系列操作。通过一组实现了Function接口的lambda表达式传入操作。eg:Optional<String> upperName = myValue.map((value) -> value.toUpperCase());
    flatMap(Function<? super T,Optional<U>> mapper)    如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatMap与map(Funtion)方法类似,区别在于flatMap中的mapper返回值必须是Optional。调用结束时,flatMap不会对结果用Optional封装。    
   filter(Predicate<? super T> predicate)  如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional。filter个方法通过传入限定条件对Optional实例的值进行过滤。对于filter函数我们可以传入实现了Predicate接口的lambda表达式。

1.6.3 java.util.Base64 类新特性

      Base64已经是 JDK的标准类库,支持Base64的编解码。

                  

1.6.4 Java.time 类新特性

                  

1.6.5 其它常用类新增特性

                          

1.6.6 HashMap类性能提升

                          

                            

1. 7 JAVA虚拟机(JVM)新特性

                           

   1. 8 新增工具特性

        jjs 工具:Nashorm 引擎,可以用来解析javascripts脚本                 

        ●Jdeps工具:java类的依赖分析工具。

 

ps:https://www.journaldev.com/2752/java-8-interface-changes-static-method-default-method

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDK8主要新特性介绍(二) 的相关文章

  • 机器学习新手必看:Jupyter Notebook入门指南

    翻译 张建军 出品 人工智能头条 公众号ID AI Thinker 人工智能头条导读 Jupyter Notebook 是一个 Web 应用程序 便于创建和共享文学化程序文档 支持实时代码 数学方程 可视化和 Markdown 其用途包括数

随机推荐

  • 解决Windows系统目录console.dll文件丢失找不到问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个console
  • stlinkv2stm32接线_stm32 st-link v2 烧写 连接 图

    ST Link V2 JTAG SWD 接口是如何定义的 下面为 ST Link V2 JTAG SWD 接口定义 仿真器端口 连接目标板 功能 1 TVCC MCU 电源 VCC 连接 STM32 目标板的电源 VCC 2 TVCC MC
  • vscode 与 idea 使用 git提交代码正确步骤

    整了快两年 终于等来了公司项目的重构 新架构中版本控制工具用的是git 关于git我工作前期踩了几个坑 并导致了一些小问题 现在特记下正确的提交步骤 idea 在idea上使用git提交代码 首先pull 拉取代码也就是更新若是拉取没问题就
  • 2023电子信息工程毕设题目选题推荐

    文章目录 1前言 2 如何选题 3 选题方向 2 1 嵌入式开发方向 2 2 物联网方向 2 3 移动通信方向 2 4 人工智能方向 2 5 算法研究方向 2 6 移动应用开发方向 2 7 网络通信方向 3 4 学长作品展示 1前言 近期不
  • module ‘seaborn‘ has no attribute ‘histplot‘

    在jupyter notebook上 用seaborn画直方图的时候 遇到以下问题 解决方法 1 打开Anaconda Prompt 2 更新seaborn pip install U seaborn 3 关掉jupyter noteboo
  • Java连接数据库(自学笔记)

    一 六步骤 第一步 注册驱动 主要告诉Java程序连接哪种数据库 如MySql Orcale等 我自己连接的是MySql数据库 Driver driver new com mysql jdbc Driver DriverManager re
  • php7opcache使用,PHP7开启OPcache加速代码执行效率提升网站访问速度

    我们的网站访问速度是用户体念最重要的指标之一 网站内容再好打开速度过慢估计也是没有人愿意访问的 用wordpress企业主题搭建的网站常常有访问慢的问题 除了优化wordpress站内问题 服务器优化也是非常重要的 下面分享一个优化网站访问
  • 小程序成長之路_引入小程序自带icon 和 引用阿里图标(四)

    上篇我们已经成功填加tabBar 那么我们这篇就讲解一下 引用图标icon 小程序里有自己的图标供大家使用 但是图标有限 有很多都满足不了我们的需求 这次呢 给大家介绍一下阿里图标 里面有大量的图标供你选择 点击http www iconf
  • matlab 等间距抽稀算法

    目录 一 算法原理 1 原理概述 2 参考文献 二 代码实现 三 结果展示 一 算法原理 1 原理概述 等间距抽稀算法 在原始点云数据中设置采样间距为 n n n 首先在数据开始的 n n
  • 【Kubernetes资源篇】ConfigMap配置管理中心详解

    文章目录 一 ConfigMap配置中心理论知识 1 ConfigMap配置中心简介 2 ConfigMap局限性 二 创建ConfigMap的四种方式 1 第一种 通过命令行创建ConfigMap 2 第二种 通过指定文件创建Config
  • 蓝桥杯题库 算法提高非vip部分(C++、Java)代码实现(281-300)

    ADV 282 Island Hopping cpp include
  • 2021最新 Minecraft我的世界云服务器搭建教程

    一 购买服务器 熟练的朋友萌请跳过这里 首先我们先去al云或者tx云买个服务器 有学生优惠的话一年才120 当然最低配的单核2G 实测纯净服同时在线10个人无压力 这里以al云为例演示 首先 在搜索栏搜索学生优惠 点进去会是这样 然后我买的
  • 词的分布表示

    词的表示 One hot Representation 独热表示 苹果 表示为 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 优点 简介 缺点 词之间是孤立的 维数灾难 Distributed Representation
  • Writing a Scientific Research Report (IMRaD)学习笔记

    参考资料 Writing a Scientific Research Report IMRaD IMRAD Introduction Methods Results and Discussion How to Organize a Pape
  • pytorch从python转 c++涉及到的数据保存加载问题;libtorch

    pytorch 从python 转 c 涉及到的数据保存加载问题 1 torch nn Module 保存 state dict 无法被 c 访问 只能转化为 python字典 python代码 model ThreeLayer FCNN
  • MongoDB基础篇-08-spring-boot-starter-data-mongodb玩法

    文章目录 0 简述 1 依赖 2 yaml 3 MongoTemplate的使用 3 1 添加文档 3 2 修改文档 3 2 1 使用save修改 3 2 2 使用特定运算符进行更新 3 3 删除文档 3 3 1 根据主键删除 3 3 2
  • 性能测试包含哪些内容?

    性能测试是对软件产品在特定条件下的性能进行测试和评估的过程 性能测试的内容可以包括以下几个方面 1 负载测试 负载测试是指在特定条件下 对软件产品的性能进行测试和评估 测试人员可以通过模拟不同的用户数量 并发请求 访问频率等条件 来评估软件
  • 竞赛 基于机器视觉的停车位识别检测

    简介 你是不是经常在停车场周围转来转去寻找停车位 如果你的车辆能准确地告诉你最近的停车位在哪里 那是不是很爽 事实证明 基于深度学习和OpenCV解决这个问题相对容易 只需获取停车场的实时视频即可 该项目较为新颖 适合作为竞赛课题方向 学长
  • 中国互联网上市科技公司市值蒸发了多少亿?

    科技公司的市值断崖路与程序员的应对救生服 跌 跌 跌 2018 抱团取暖的科技公司 2018 年 对于中国互联网上市科技公司来说 是跌宕起伏的一年 这一年的前半段 以腾讯 阿里为首的头部公司 风光无两 市值屡创新高 腾讯最高市值突破 500
  • JDK8主要新特性介绍(二)

    1 6 类库新特性 java util stream 类库包新特性 java util Optional 类新特性 java util Base64 类新特性 Java time 类新特性 其它常用类新增特性 HashMap类性能提升 1