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

一、概述 

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

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

二、本期教学目标

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

三、正文

1️⃣java8新特性

2️⃣什么是Lambda表达式

       1️⃣可选类型声明

       2️⃣可选的参数圆括号

       3️⃣可选的大括号

       4️⃣可选的返回关键字

       以上第1、2点内容,我是总结到了该篇《java零基础入门-java8新特性(上篇)》,需要的小伙伴可以去传送门直接去。

3️⃣什么是函数式接口

         说到函数式接口,肯定都要先了解下其概念,要不然后续是没法说的,所谓的函数式接口就是:有且仅有一个抽象方法,但是可以有多个非抽象方法的接口,这样的接口可以转换为 Lambda 表达式,也可以通过 Lambda 表达式来创建该接口的对象。倘若 Lambda表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上也要进行声明。

        其次就是@FunctionalInterface 注解可以在任意函数式接口上使用,这是Java 8中专门为函数式接口引入了一个新的注解@FunctionalInterface 。这样做可以检查它是否满足一个函数式接口的要求,是否是函数式接口,同时 javadoc 也会包含一条声明,证明这个接口是一个函数式接口。

语法如下:

修饰符 interface 接口名称 {public abstract 返回值类型 方法名称(可选参数信息);// 其他非抽象方法内容}

        接下来我就给大家举几个例子吧,结合使用函数式接口和lambda表达式联合使用,比如联合使用处理一个字符串,具体演示例子请看下方。

        首先,我们定义一个函数式接口Myfuction(),具体定义如下:

@FunctionalInterface
public interface Myfuction <T> {public T getValue(T t);}

        接下来,我们再定义一个处理字符串的方法,其中参数为Myfuction接口实例和需要转换的字符串,把这两作为参数进行方法入参。

public String changeStr(Myfuction<String> myFunc, String str){return myFunc.getValue(str);
}

        接下来,就是测试环节了,对我们刚才自定义的函数式接口进行一波测试,此时我们传递的函数式接口的参数为Lambda表达式,实现的字符串的需求是将字符串统一转化为大写。

具体演示代码如下:

@Test
public void test(){String str = changeStr((s) -> s.toUpperCase(), "test");//打印System.out.println(str);
}

        我们直接运行test()方法,控制台打印的内容如下:

TEST

        上述打印很明显是成功了,接着我们再对该字符串进行截取字符串的某一部分,看看这个又要怎么实现呢?具体示例代码如下:

@Test
public void test1(){String str = changeStr((s) ->s.substring(0,2),"test");System.out.println(str);
}

运行test1方法,控制台打印结果内容如下所示。

te

        可以看到,我们可以通过changeStr(MyFunction<String> myFunc, String str)方法结合Lambda表达式对字符串进行任意操作,这波操作你们学会了么。

        其中有一点需要注意:Lambda 表达式作为参数进行传递 :为了将 Lambda 表达式作为参数传递,其接收Lambda 表达式的参数类型必须是与该 Lambda 表达式兼容的函数式接口的类型,要不然会报错处理的,这点你们需要注意的哈 。

        剩下来的知识点,就需要你们大家空闲时间多练练了啊。

4️⃣掌握Stream Api

        如上是简单学了下何为函数式编程且示例演示,接下来我们还得再学点新的知识点啊,我们都知道,对于Java8中有两大最为重要的改变:第一个是引入 Lambda 表达式;二就是 Stream API(java.util.stream.*) 也可称‘’io流‘’。

        说起Stream,你们知道它是啥吗? Stream是 Java8 中处理集合的关键抽象概念,它可以指定你对集合进行一些处理操作,比如对集合进行非常复杂的查找、过滤和映射数据等操作。然而使用Stream API 对集合数据进行操作,就类似于使用 sql 语句 执行的数据库查询一样。其中啊,也可以使用 Stream API 来并行执行操作。

        简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式,你们一旦用上,能替你们节俭不少时间呢。

        如下是对Stream流的一句概念!

流是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。“集合讲的是数据,流讲的是计算!”

然后对于Stream流,总结了三点,你们需要注意一下啊。具体如下: 

  • ① Stream本身不存储元素。
  • ② Stream本身不会改变源对象。相反,他们会返回一个持有结果的新Stream。
  • ③ Stream本身是延迟执行操作。这表明着它们会等到需要结果的时候才会执行。

        然后很多小伙伴就越大的好奇了,那具体Stream到底怎么使用呀?不急啊,我还要给大家科普玩最后一点,那就是到底如何创建Stream,操作Stream流有哪些步骤流程?

如下是总结对Stream操作的三个步骤:

  1. 创建Stream。
  2. 操作Stream。
  3. 终止操作。

        ...

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红队笔记11:pWnOS1.0打靶流程解法2-ssh免密登录-rsa私钥破解-shellshock提权(vulnhub)

目录 开头 1.webmin文件泄露漏洞利用-/etc/passwd/ 2.ssh免密登录-私钥伪随机数碰撞&#xff1a; ssh免密登录原理&#xff1a; prng伪随机数生成ssh rsa 私钥公钥密码库 openssl和openssh的关系&#xff1a; ssh登录报错-解决思路-vv 3.提权-内核提权-shellshock提权 内…

Aurora8b10b(1)IP核介绍并基于IP核进行设计

文章目录 前言一、IP核设置二、基于IP核进行设计2.1、设计框图2.2、aurora_8b10b_0模块2.3、aurora_8b10b_0_CLOCK_MODULE2.4、aurora_8b10b_0_SUPPORT_RESET_LOGIC2.5、aurora8b10b_channel模块2.6、IBUFDS_GTE2模块2.7、aurora_8b10b_0_gt_common_wrapper模块2.8、aurora8b10…

特征融合篇 | YOLOv8改进之将Neck网络更换为GFPN(附2种改进方法)

前言:Hello大家好,我是小哥谈。GFPN(Global Feature Pyramid Network)是一种用于目标检测的神经网络架构,它是在Faster R-CNN的基础上进行改进的,旨在提高目标检测的性能和效果。其核心思想是引入全局特征金字塔,通过多尺度的特征融合来提取更丰富的语义信息。具体来说,…

因子数据预处理-去极值和标准化

一. 去极值 因子数据中过大或过小的值会影响分析结果&#xff0c;特别是在回归时&#xff0c;离群值会严重影响因子和收益率之间的相关性估计结果。 因子去极值的处理方法&#xff1a; 确定上下限将上下限外的数据修改为上下限值 常见的去极值方法有三种&#xff0c;分别是…

网络请求避坑,私有网络请求(Private Network Access)

前言 网络请求&#xff0c;大家肯定熟悉的不能再熟悉&#xff0c;网络请求失败&#xff0c;大家也肯定很熟悉。排查网络请求&#xff0c;也是我们必备的技能&#xff0c;对不&#xff0c;兄弟。 我坦言&#xff0c;最怕两种网络请求失败。 第一种&#xff1a;PC端模拟没有异常…

2012年认证杯SPSSPRO杯数学建模A题(第一阶段)蜘蛛网全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 A题 蜘蛛网 原题再现&#xff1a; 第一阶段问题   世界上生存着许多种类的蜘蛛&#xff0c;而其中的大部分种类都会通过结网来进行捕食。请你建立合理的数学模型&#xff0c;说明蜘蛛网织成怎样的结构才是最合适的。 整体求解过程概述(摘要…

【面试八股总结】传输控制协议TCP(三)

参考资料 &#xff1a;小林Coding、阿秀、代码随想录 一、TCP拥塞控制⭐ 1. 慢启动 – Slow Start 慢启动是指TCP连接刚建立&#xff0c;一点一点地提速&#xff0c;试探一下网络的承受能力&#xff0c;以免直接扰乱了网络通道的秩序。 慢启动算法&#xff1a; 初始拥塞窗口…

【EasyExcel】—— 实现excel动态表头设置、多个sheet

引入jar <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.0</version></dependency>代码 public static void main(String[] args) {//选择存储地址String fileName "/User…

构建第一个ArkTS应用(FA模型)

创建ArkTS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。选择Application应用开发&#xff08;本文以应用开发为例&#xff0c;Atomic Servi…

OSError: Can‘t load tokenizer for ‘bert-base-chinese‘

文章目录 OSError: Cant load tokenizer for bert-base-chinese1.问题描述2.解决办法 OSError: Can’t load tokenizer for ‘bert-base-chinese’ 1.问题描述 使用from_pretrained()函数从预训练的权重中加载模型时报错&#xff1a; OSError: Can’t load tokenizer for ‘…

axios 封装 http 请求详解

前言 Axios 是一个基于 Promise 的 HTTP 库&#xff0c;它的概念及使用方法本文不过多赘述&#xff0c;请参考&#xff1a;axios传送门 本文重点讲述下在项目中是如何利用 axios 封装 http 请求。 一、预设全局变量 在 /const/preset.js 中配置预先设置一些全局变量 window.…

算法错题本

这里写目录标题 错题本注意数据的耦合性对于无解情况的处理思路一组数据以0为结束标记&#xff0c;如何输入到数组中&#xff0c;并计数多个数据进行比较链表删除重复元素的启发循环体里谨慎写类型定义并初始化&#xff08;一般写上就是错&#xff09;队列中读取队尾元素数组当…