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

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

一、概述 

       ​上几期,我们是完整的学完了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. 终止操作。

        ...


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。