写点什么

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

作者:喵手
  • 2022 年 7 月 22 日
  • 本文字数:3108 字

    阅读完需:约 10 分钟

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

哈喽,各位小伙伴们好,我是喵手。

今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流 学习,互相学习,才能成长的更快,对吧。

我是一名 java 开发,所以日常接触到最多的就是 java 啦,所以我趁自己有空,就来好好回忆,把自己学到的会的,进行输出,不图什么有回报,只想能帮助到更多的小伙伴,就好。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对喵手我创作道路上最好的鼓励与支持!

一、概述

       论前几期啊,我们是分别讲了Object类Date类FormDate类Calendar类System类StringBuilder类,不知道大家掌握的如何,如果没有及时巩固的同学,可以看我这里,我给大家罗列了下,快速学习通道,只希望能帮助到大家更好的学习与成长,这就是我写作的初衷。

       ​上几期,我们是完整的学完了 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 新特性

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

  • Lambda 表达式

  • 函数式接口

  • 方法引用与构造器引用

  • Stream API

  • 接口的默认方法与静态方法

  • 新时间日期 API

  • 其他新特性

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

2️⃣什么是 Lambda 表达式

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

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

l       ambda 表达式,也称闭包,是 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 操作三步骤

​​​... ...

       好啦,以上就是本期内容的全部教学内容啦,如果对文中的任何知识点有疑问,欢迎评论区评论留言呀,我看见都会一一解答的。

四、文末

       教学是结束了,但是有些话不知我但讲不当讲,啊哈哈, 可我还是想说给你们听听。如下是我很喜欢的一句话,我打算送给你们,希望我们都能变得更好更优秀。

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!

-------------------------------------------

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

-------------------------------------------


发布于: 4 小时前阅读数: 13
用户头像

喵手

关注

还未添加个人签名 2022.07.05 加入

还未添加个人简介

评论

发布
暂无评论
java零基础入门-java8新特性(上篇)_Java_喵手_InfoQ写作社区