Java零基础入门-java8新特性(上篇)

一、本期教学目标

  • java8有哪些新特性
  • 什么是函数式接口
  • 什么是Lambda表达式
  • 掌握Stream Api
  • Stream和Collect集合区别
  • Stream创建方式
  • Stream操作三步骤

二、概述

        上几期,我们是完整的学完了java异常类的学习及实战演示、以及学习了线程进程等基础概念,而这一期,我们要来玩点好的东西,那就是java8,我们都知道java8是自2004年发布java5之后最重要且一次重大的版本更新,虽然我们的JDK环境 也升级到了java1.8,但是在日常的开发过程中,使用最多的编程风格还是停留在 JDK1.7版本。

        那对于java1.8,你们有了解多少它相关的新特性呢?至于java8,于2013年9月正式发布,距离至今已快十年载了,想必大家对它的新特性大大小小也耳濡目染了些吧?那么趁着今天这个空闲日子,我就跟大家一起来聊聊它-java8之新特性。

三、正文

1️⃣java8新特性

        如下是java8几个主要的新特性总结,具体如下:

  • Lambda表达式
  • 函数式接口
  • 方法引用与构造器引用
  • Stream API
  • 接口的默认方法与静态方法
  • 新时间日期API
  • 其他新特性

        如下是我绘制的一个java8新特性思维导图,方便大家好保存浏览,对java8新特性也有一个概览了解。

2️⃣什么是Lambda表达式

        耳熟能详,一直没去主动探索何为lambda表达式,这是你们有些人的心声吧,这次我就要替你们打破心声,让你们对此有一个肯定的解答,而不再是一问就给予说我项目中没有用到lambda表达式,那不可,就算项目没用,我们自己私下也得学起来啊,这不,这么有利的学习驱动力与免费资料,不学就浪费了啊。

        那到底什么是lambda表达式?请听我一一道来。

lambda表达式,也称闭包,是java8中最大和最令人动容的语法改变。它允许将函数作为参数进行传递,比如传递给某个方法,也可以把本身代码当做数据处理。

        其实呢,java支持lambda表达式,也算是比较晚了,在早期,比如jvm平台上的语言(Groovy、Scala等)从诞生之日起就已经支持 Lambda 表达式语法了。但是java并没有一诞生就支持,而是采用了匿名内部类来代替lambda表达式。

比如匿名内部类方式进行排序:

        //匿名内部类方式进行排序
        List<String> names = Arrays.asList("a", "c", "b","d");

        names.sort(new Comparator<String>() {
            @Override
            public int compare(String str1, String str2) {
                return str1.compareTo(str2);
            }
        });

可以看下运行结果:

         如果换做lambda表达式来进行处理?那语句应该又是怎么写呢?我这里就给大家对比一下:

具体代码如下:

    //lambda表达式排序
    @Test
    public void test1() {
        //匿名内部类方式进行排序
        List<String> names = Arrays.asList("a", "c", "b", "d");
        System.out.println("排序前" + names);
        Collections.sort(names, (s1, s2) -> s1.compareTo(s2));
        System.out.println("排序后" + names);
    }

可以看下运行结果:

         前后对比一下,是不是非常的简洁,这就是lambda语法。其实这也得感谢大量为此贡献精力的社区跟开源大佬,是他们共同打造了java可实现简洁而紧凑的语言结构。才有我们这些后辈学习与使用,即,我们怎能不学习它了。

        给大家总结一下,Lambda表达式的语法格式如下:

(parameters) -> expression

或

(parameters) ->{ statements; }

然后对于lambda表达式编程风格,可总结为以下四类:

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

如下,我给大家分别对于上述分类进行一下示例演示吧,这样你们就能看的更清晰点。

1️⃣可选类型声明

        在使用过程中,可以不用显示声明参数类型,由编辑器识别类型。代码演示如下:

List<String> names = Arrays.asList("a", "c", "b", "d");
Collections.sort(names, (str1, str2) -> str1.compareTo(str2));

        如果不由编辑器自动识别参数类型,你也可以手动指定该参数类型。代码演示如下:

        List<String> names = Arrays.asList("a", "c", "b", "d");
        Collections.sort(names, (String str1, String str2) -> str1.compareTo(str2));

        二者运行结果是一致的! 这你们大家也可以去测试一下。

2️⃣可选的参数圆括号

        当方法那只有一个参数时,无需定义圆括号。代码演示如下:

names.stream().forEach(p -> {System.out.println(p);});

        当多个参数时,那就得需要定义括号。代码演示如下:

names.sort((p1, p2) -> p1.compareTo(p2));

3️⃣可选的大括号

        当主体只包含了一行时,无需使用大括号。代码演示如下:

names.forEach( p -> System.out.println( p ) );

 当主体包含多行时,需要使用大括号。代码演示如下:

names.forEach(p -> {
      System.out.println(p);
      System.out.println(p);
});

4️⃣可选的返回关键字

        如果表达式中的语句块只有一行,可以不用return,返回值的类型也由编译器自得。代码演示如下:

names.sort((e1, e2) -> e1.compareTo(e2));

 如果语句块有多行,可以在大括号中指明表达式返回值。代码演示如下:

names.sort((e1, e2) -> {
     int res = e1.compareTo(e2);
     return res;
});

        注意:如下内容,我将放在下一期进行教学讲解。本期就按上三个子标题的内容作为本期主要教学内容,想看下4个子标题内容的同学,可以看看我下期的教学内容哦,传送门-->《java零基础入门-java8新特性(下篇)》

3️⃣什么是函数式接口

        ...

4️⃣掌握Stream Api

        ...

5️⃣Stream和Collect集合区别

        ...

6️⃣Stream创建方式

        ...

7️⃣Stream操作三步骤

        ...

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cache多核之间的一致性MESI

快速链接: 【精选】ARMv8/ARMv9架构入门到精通-[目录] &#x1f448;&#x1f448;&#x1f448; 思考: 1、为什么要学习MESI协议&#xff1f; 哪里用到了&#xff1f;你确定真的用到了&#xff1f; 2、MESI只是一个协议&#xff0c;总得依赖一个硬件去执行该协议吧&#xff0c…

电商技术揭秘一:电商架构设计与核心技术

文章目录 引言一、电商平台架构概述1.1 架构设计原则与架构类型选择1.2 传统电商平台架构与现代化架构趋势分析 二、高并发处理与负载均衡2.1 高并发访问特点分析与挑战2.2 负载均衡原理与算法选择 三、分布式数据库与缓存技术3.1 分布式数据库设计与一致性考量3.2 缓存策略与缓…

C++实现二叉搜索树的增删查改(非递归玩法)

文章目录 一、二叉搜索树的概念结构和时间复杂度二、二叉搜索树的插入三、二叉搜索树的查找四、二叉搜索树的删除&#xff08;最麻烦&#xff0c;情况最多&#xff0c;一一分析&#xff09;3.1首先我们按照一般情况下写&#xff0c;不考虑特殊情况下4.1.1左为空的情况&#xff…

分享:搭建企微知识库简单易学步骤

说起企微知识库&#xff0c;可能有些人还不太清楚&#xff0c;为什么现在很懂企业选择搭建企微知识库&#xff1f;其实&#xff0c;企微知识库就是一个装满了企业的各种知识、经验和资料的载体。目的是为了方便员工随时查找和学习、有助于知识的传承和共享、加强团队协作和沟通…

自然语言处理: 第二十一章大模型基底之llama2

文章地址: LLaMA:OpenandEfficient Foundation Language Models 项目地址: meta-llama/llama: Inference code for Llama models (github.com) 前言 在LLaMa1的基础之上有兴趣的可以看看我上一篇博客自然语言处理: 第二十一章大模型基底之llama1。Meta 又继续推出了LLaMa2&a…

windows安装OpenUSD

一、下载OpenUSD git clone https://github.com/PixarAnimationStudios/OpenUSDOpenUSD&#xff0c;原名USD&#xff08;Universal Scene Description&#xff0c;通用场景描述&#xff09;&#xff0c;是由皮克斯动画工作室开发的一种开放数据格式。OpenUSD主要用于在虚拟世界…

AI论文速读 |【综述】 时序分析基础模型:教程与综述

论文标题&#xff1a;Foundation Models for Time Series Analysis: A Tutorial and Survey 作者&#xff1a; Yuxuan Liang&#xff08;梁宇轩&#xff09;, Haomin Wen&#xff08;温浩珉&#xff09;, Yuqi Nie&#xff08;PatchTST一作&#xff09;, Yushan Jiang, Ming J…

机器学习全攻略:概念、流程、分类与行业应用案例集锦

目录 1.引言 2.从零开始认识机器学习&#xff1a;基本概念与重要术语 3.五步走&#xff1a;掌握机器学习项目执行的完整流程 3.1.问题定义与数据收集 3.2.数据预处理与特征工程 3.3.模型选择与训练 3.4.模型评估与优化 3.5.模型部署与监控 4.深入了解各类机器学习方法…

计算机网络—TCP协议详解:特性、应用(2)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;マリンブルーの庭園—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 3:34 &#x1f504; ◀️…

基于卷积神经网络的苹果等级分类系统(pytorch框架)【python源码+UI界面+前端界面+功能源码详解】

功能演示&#xff1a; 苹果等级分类系统&#xff0c;基于vgg16&#xff0c;resnet50卷积神经网络&#xff08;pytorch框架&#xff09;_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神经网络的苹果等级分类系统是在pytorch框架下实现的&#xff0c;系统中有两…

LangChain-05 RAG Conversational 增强检索会话

安装依赖 pip install --upgrade --quiet langchain-core langchain-community langchain-openai编写代码 from langchain_core.messages import AIMessage, HumanMessage, get_buffer_string from langchain_core.prompts import format_document from langchain_core.runn…

腾讯云轻量服务器8核16G服务器价格1668元一年送3个月,18M大带宽

腾讯云轻量应用服务器8核16G配置租用优惠价格1668元15个月&#xff0c;买一年送3个月&#xff0c;配置为&#xff1a;轻量8核16G18M、270GB SSD盘、3500GB月流量、18M带宽&#xff0c;腾讯云优惠活动 yunfuwuqiba.com/go/txy 活动链接打开如下图&#xff1a; 腾讯云8核16G服务器…

基于java+SpringBoot+Vue的网上订餐系统设计与实现

基于javaSpringBootVue的网上订餐系统设计与实现 开发语言: Java 数据库: MySQL技术: Spring Boot JSP工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 菜品浏览与选择&#xff1a;用户可以浏览不同的菜品分类&#xff0c;并选择心仪的菜品。 订单创建与管理&…

多线程--深入探究多线程的重点,难点以及常考点线程安全问题

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

SpringBoot登录校验(四)过滤器Filter

JWT令牌生成后&#xff0c;客户端发的请求头中会带有JWT令牌&#xff0c;服务端需要校验每个请求的令牌&#xff0c;如果在每个controller方法中添加校验模块&#xff0c;则十分复杂且冗余&#xff0c;所以引入统一拦截模块&#xff0c;将请求拦截下来并做校验&#xff0c;这块…

100道面试必会算法-18-岛屿问题(数量、周长、面积)

100道面试必会算法-18-岛屿问题&#xff08;数量、周长、面积&#xff09; 题目描述 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平…

银行数字化转型导师坚鹏:银行数字化转型给支行带来的8大价值

银行数字化转型给支行带来的8大价值 银行数字化转型对不仅对总行、分行产生了深远影响&#xff0c;给总行、分行带来了新质生产力&#xff0c;对银行支行&#xff08;包括网点&#xff09;也会产生重要价值&#xff0c;银行数字化转型导师坚鹏从以下8个方面进行详细分析&#…

Linux多进程通信(4)——消息队列从入门到实战!

Linux多进程通信总结——进程间通信看这一篇足够啦&#xff01; 1.基本介绍 1&#xff09;消息队列的本质其实是一个内核提供的链表&#xff0c;内核基于这个链表&#xff0c;实现了一个数据结构&#xff0c;向消息队列中写数据&#xff0c;实际上是向这个数据结构中插入一个…

keil创建工程 芯源半导体CW32F003E4P7

提前下载keil 安装步骤 1、下载CW32F003固件库 芯源半导体官网下载固件库 下载好后右键解压 CW32F003_StandardPeripheralLib_V1.5\IdeSupport\MDK 进入MDK文件夹 双击WHXY.CW32F003_DFP.1.0.4.pack安装固件库 点击next然后finish安装结束 keil创建工程 点击new uVision P…

【软件工程】详细设计(一)

1. 引言 1.1 编写目的 该文档的目的是描述《学生成绩管理系统》项目的详细设计&#xff0c;其主要内容包括&#xff1a; 系统功能简介 系统详细设计简述 各个模块的实现逻辑 最小模块组件的伪代码 本文档的预期的读者是&#xff1a; 开发人员 项目管理人员 测试人员 …