java8 (jdk 1.8) 新特性 ——初步,发现不一样的新特性

news2024/12/23 17:34:17

前言

在这里插入图片描述
在这里插入图片描述
3202 年了,现在市面上的公司几乎都是 jdk1.8+, 有也是极少数在用java7 , 即使是一些传统企业,在技术革新方面也很重视,毕竟现在是大数据时代

那么java8 有哪些新特性呢?换句话说为什么在码界 这么受欢迎!!别急,我们慢慢来品

1. java8 的新特性

  • List item
  • Lamdba表达式
  • Stream API
  • 函数式接口
  • 方法引用和构造引用
  • 接口中的默认方法跟静态方法
  • 新时间日期Api
  • Optional
  • 其他特性

📌 后续的代码只要混个眼熟,先别管为什么这样写,后续章节会对8个特性进行解释 !!

Lamdba表达式 跟 Stream API 最为重要, 时间api 跟 optiona 属性 也是工作中常用的

常常听到一句话,“感受Lamdba 之美” ,美不美的我是不清楚,不过倒是方便了很多

简单看个例子 :

//获取class
        List<Integer> ids = Arrays.asList(1,2,3,4,5,6);
        ids.forEach(id ->{
            System.out.println(id);
        });

可以看到最主要就是有个 箭头 ->

Stream API 就更不得了了,这东西 操作java中的数据就跟操作数据库一样

比如:

查询年龄大于20 的数据

mysql: (这边就直接用 * 了)

select * from  user_info where age > 20

stream

package com.test1.demo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;

@Data
@AllArgsConstructor
public class UserInfo {

    private Integer id;
    private String name;
    private Integer age;

}
 
 @Test
    public void tes9(){
        //获取class
       List<UserInfo> userList =new ArrayList<>();
        userList.add(new UserInfo(1,"张三",19));
        userList.add(new UserInfo(2,"李四",23));
        userList.add(new UserInfo(3,"王五",25));
        userList.add(new UserInfo(4,"赵六",18));
        userList.stream().filter(s->s.getAge()>20).forEach(System.out::println);

    }

在这里插入图片描述
先到这,今天最主要的不是了解这两个怎么用,就是混个眼熟

最主要的还是解决面试官 抛出的问题: 新特性的优点?

2. java8 的优点

  1. 速度更快
  2. 代码少、简洁
  3. 强大的Stream API
  4. 对并行流进行扩展和支持
  5. 解决空指针异常Optional

📌 速度更快体现在哪里呢?

其主要原因还是 底层数据结构的变动,垃圾回收机制也就是内存结构的改动,对并行操作有了更好的扩展跟支持

底层数据结构最核心的就是 HashMap了,这个词不陌生

原来HashMap 是没有使用Hash表,无序,比较大小我们就得用 equals,如果我们往里边添加一个元素,假设不能重复,没有has表,也就是没有hash算法,就得跟每一个元素都equals 一次,数据少还好,要是一万次,效率极低

因此,采用了hash表,底层还是数组,采用hash 算法

什么是哈希表?

用一个例子来说明:

有这么24个篮球,编号分别为1-24,需要将篮球分成六组应该怎么分

这还不简单 :

编号 1 -4 第一组 5-8 第二组 9-12 第三组

编号 13-16 第四组 17-20 第五组 21-24 第六组

那如果我要找 16 号篮球球在哪个组呢? 这数据才24, 要找到也方便,要是数据量变大,成百上千,分成多个组,要快速找到想要的编号在哪个组,就显得困难了

这时候就推出了哈希,进行散列

具体实现:
分成6组

将 编号除 6 余数为0 的为 第零组:6、12、18、24

将 编号除 6 余数为1 的为 第一组:1、7、13、19

将 编号除 6 余数为2 的为 第二组:2、8、14、20

将 编号除 6 余数为3 的为 第三组:3、9、15、21

将 编号除 6 余数为4 的为 第四组:4、10、16、22

将 编号除 6 余数为5 的为 第五组:5、11、17、23

这要我们要找一个编号就很方便,比如找16,16%6 =4 16 在第四组 ,这种方式就是高效的散列,我们称之为Hash

来看看哈希的运行图解,还是以上述篮球分组为例:

在这里插入图片描述
这里有几个概念:

key:就是编号

索引:数组的下标,可以快速定位,检索,我们分组的序号

哈希函数:将编号映射到索引上,采用的是取余方法 % 余数代表数组下标

哈希桶:保存索引的值的数组或链表,每个索引相同的元素以链表形式连接

通过上述,可以知道,这个存放数据的散列表就是我们说的哈希表

📌 代码少、简洁 ,强大的Stream API

这两点前面我们进行简单案例就已经感受到了

📌 对并行流进行扩展和支持

什么是并行流?

并行流就是将一个流的内容分成多个数据块,并用不同的线程分别处理每个不同数据块的流

现在有 一个学生 集合,我们知道学生总分,考试科目 为 7 科,求每个学生的平均分

package com.test1.demo;


import lombok.Data;

@Data
public class Student {
    private Integer id;
    private Double totalScore;
    private Double  average;

    public Student(Integer id, Double totalScore) {
        this.id = id;
        this.totalScore = totalScore;
    }
}

并行流:

@Test
    public void tes10() {
        //获取class
        List<Student> userList = new ArrayList<>();
        for (int i = 0; i < 30000; i++) {
            userList.add(new Student(1, 600.00));
        }
        userList.parallelStream().forEach(stu -> {
            stu.setAverage(stu.getTotalScore() / 7);
        });
    }

然而,并行流并不是随便用的,对于数据量较少的,不建议使用,数据量少用并行流反而适得其反,一般工作中基本的循环就够了

单核系统就更不要用了

📌解决空指针异常Optional

Optional 主要是用来对一个对象进行判空操作

例如之前

 if (userInfo !=null) {
            userInfo.getAge();
           .....
        }

现在


Optional.of(userInfo).get().getAge()

写到最后:

以上就是java8 新特性的初步认识了!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/653049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NLP:词义分布的空间维度——从文本符号到词向量表征

自然语言处理的前提是文本表示&#xff08;Representation&#xff09;&#xff0c;即如何将人类符号化的文本转换成 计算机所能“理解”的表征形式。早期的自然语言表征主要采用离散表示。近年来&#xff0c;随着深度 学习的不断发展&#xff0c;基于神经网络的分布式词向量技…

对象存储?CRUD Boy实现对文件的增删改查

大家好&#xff01;我是sum墨&#xff0c;一个一线的底层码农&#xff0c;平时喜欢研究和思考一些技术相关的问题并整理成文&#xff0c;限于本人水平&#xff0c;如果文章和代码有表述不当之处&#xff0c;还请不吝赐教。 以下是正文&#xff01; 对象存储是什么&#xff1f…

代码随想录算法训练营第五十九天|503.下一个更大元素II|42. 接雨水

LeetCode503.下一个更大元素II 基本思路&#xff1a;本题思路与739.每日方法思路相似&#xff0c;但是需要使用到循环数组&#xff0c;将两个nums数组拼接在一起&#xff0c;使用单调栈计算出每一个元素的下一个最大值&#xff0c;最后再把结果集即result数组resize到原数组大…

java 高校宿舍管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 高校宿舍管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…

第六章 番外篇:webdataset

参考教程&#xff1a; https://github.com/pytorch/pytorch/issues/38419 https://zhuanlan.zhihu.com/p/412772439 https://webdataset.github.io/webdataset/gettingstarted/ 文章目录 背景WebDatasetwebdataset的生成webdataset的加载示例代码 背景 训练数据通常是以个体的…

霹雳吧啦 目标检测 学习笔记

霹雳吧啦Wz的个人空间-霹雳吧啦Wz个人主页-哔哩哔哩视频 目标检测篇github地址&#xff1b;GitHub - WZMIAOMIAO/deep-learning-for-image-processing: deep learning for image processing including classification and object-detection etc. 数据集 实例分割vs语义分割&a…

【强烈推荐】 十多款2023年必备国内外王炸级AI工具 (免费 精品 好用) 让你秒变神一样的装逼佬感受10倍生产力 (7) AI语言模型

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

云安全的第一站:CSPM

在企业数字化转型和云计算技术的加持下&#xff0c;企业上云趋势势不可挡。与此同时&#xff0c;数据量加大&#xff0c;网络攻击日趋频繁&#xff0c;对企业来说&#xff0c;包括云计算安全在内的网络安全部署的重要性日益显现。 在Gartner2022年CIO技术执行官问卷调查中&…

chatgpt赋能python:Python怎么绕过短信验证

Python怎么绕过短信验证 短信验证以及其他形式的验证码已经成为了许多网站和应用程序保护用户隐私的常见方式。然而&#xff0c;对于某些特定的情况&#xff0c;用户可能需要绕过这些验证码&#xff0c;例如自动化测试或者爬取数据。那么&#xff0c;在Python中&#xff0c;我…

安装Hive

安装Hive 准备 安装Java环境&#xff1a;Hive需要Java环境支持&#xff0c;所以需要先安装Java。安装文档&#xff1a;http://t.csdn.cn/deBJu 安装MySQL数据库。http://t.csdn.cn/d24pN 下载Hive 下载Hive的二进制文件。 链接&#xff1a;https://pan.baidu.com/s/1fdg7…

管理类联考——英语二——技巧篇——写作——书信作文——经典方法论

第一节 书信作文谋篇布局 考研英语从2005年开始考查书信作文&#xff0c;迄今为止共考查过几十次。书信作文考查的信件种类繁多&#xff0c;其中建议信是考查最为频繁的信件类型。从考查内容来看&#xff0c;校园学习生活、职业发展、民生热点成为重点考查对象&#xff0c;这一…

hadoop 相关环境搭建

21.Windows下安装Hadoop&#xff1b; Hive MySQL版_hadoop hive windows安装_学无止境的大象的博客-CSDN博客 https://www.cnblogs.com/liugp/p/16244600.html 备注。因为beeline一直报错&#xff0c;最有一怒之下把hive的lib下所有jar都拷贝到hadoop的share\hadoop\common\lib…

2023 年 5 大机器人趋势

原创 | 文 BFT机器人 国际机器人联合会报告 法兰克福&#xff0c;2023 年 2 月 16 日——全球操作机器人的存量创下约 350 万台的新纪录——安装价值估计达到 157 亿美元。国际机器人联合会分析了 2023 年影响机器人技术和自动化的 5 大趋势。 2023 年 5 大机器人趋势 © 国…

2000-2021年全国1km分辨率的逐日PM10栅格数据

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们分享了来自于Zendo平台的1km分辨率的PM2.5栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff1a; 2000-2021年全国1km分辨率的逐日PM2.5栅格数据 2000-2021年全国1km分辨率的逐月PM2.5栅格…

双功能螯合剂Me-Tetrazine PEG7 NOTA,应用于生物和材料科学的研究中

文章关键词&#xff1a;双功能螯合剂&#xff0c;大环化合物 MeTz-PEG7-NOTA&#xff0c;NOTA PEG7 Me-Tetrazine&#xff0c;甲基四嗪-PEG7-NOTA &#xff08;文章编辑来源于&#xff1a;西安凯新生物科技有限公司小编WMJ&#xff09;​ 一、Product structure&#xff1a;…

组合逻辑毛刺消除

目录 组合逻辑毛刺消除 1、简介 2、实验任务 3、程序设计 1、组合逻辑输出加寄存器 2、信号同步法 &#xff08;1&#xff09;信号延时同步法 &#xff08;2&#xff09;状态机控制 3、格雷码计数器 4、仿真验证 组合逻辑毛刺消除 信号在 IC/FPGA 器件中通过逻辑单元…

管理类联考——英语——翻译篇——新题型——经典方法论

第一节 英语(一)翻译 根据考试大纲&#xff0c;考研英语(一R翻译部分主要考查考生准确理解概念或结构较复杂的英语文字材料的能力。具体考查方式是要求考生阅读一篇约400词的文章&#xff0c;并将其中5个画线部分(约150词)译成汉语,要求译文准确、完整、通顺。 可以看出&#…

js数组高阶函数——filter()方法

js数组高阶函数——filter方法 filter&#xff08;&#xff09;方法⭐⭐⭐例1⭐⭐⭐例2⭐⭐⭐例3⭐⭐⭐例4⭐⭐⭐例5 filter&#xff08;&#xff09;方法 ⭐一般来说&#xff0c;filter() 方法用于过滤数组中的元素&#xff0c;并返回一个新数组。 语法&#xff1a; array.f…

Python多线程编程详解

概要 进程&#xff08;process&#xff09;指的是正在运行的程序的实例&#xff0c;当我们执行某个程序时&#xff0c;进程就被操作系统创建了。而线程&#xff08;thread&#xff09;则包含于进程之中&#xff0c;是操作系统能够进行运算调度的最小单元&#xff0c;多个线程可…

【AntDB数据库】AntDB数据库告警管理

告警历史 功能概述 数据库系统的主机、单节点集群的被监测指标达到告警阀值时&#xff0c;AMOPS就会产生告警并展示在告警分类页面上。 告警分类页面提供告警搜索查看功能&#xff0c;用户可以指定监控项、集群、事件级别、时间范围和告警对象对告警进行搜索。 查询的告警数…