写点什么

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

作者:喵手
  • 2022 年 7 月 20 日
  • 本文字数:3979 字

    阅读完需:约 13 分钟

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 新特性

2️⃣什么是 Lambda 表达式

  • 1️⃣可选类型声明

  • 2️⃣可选的参数圆括号

  • 3️⃣可选的大括号

  • 4️⃣可选的返回关键字

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

3️⃣什么是函数式接口

总而言之:函数式接口,即适用于函数式编程场景的接口。而 Java 中的函数式编程体现就是 Lambda 表达式,所以函数式接口就是可以适用于 Lambda 使用的接口。只有确保接口中有且仅有一个抽象方法,Java 中的 Lambda 才能顺利地进行推导。

4️⃣掌握 Stream Api

总而言之,何为 Stream 流,Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你对集合进行一些处理操作,比如对集合进行非常复杂的查找、过滤和映射数据等操作。

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

5️⃣Stream 和 Collections 区别

说起 Stream 流,那肯定会想到 Collections 类,对比它两,你们知道,它两之间有何联系,又有何异同呢?这点,想必你们在上一期既然学了,那对于你们而言,肯定是要有所准备的啊。

见名知意,既然称 Stream 为流,而 Collections 为集合工具类,那自然好区别,Stream 流是一个集合元素的函数模型,而 Collections 是对元素集合进行的操作,而它本身也是一个集合,而 Stream 流不是集合,更不是数据结构,其本身也不存储任何元素,但它可以操作元素进行任何操作,是一种对元素的处理方案。

且对于 Stream 流而言,Stream 流属于管道流,只能被消费一次,比如第一次 Stream 流调用完,数据就会被处理后转到下一个 Stream 流上,而上一个 Stream 流就会关闭掉,不能再调用了。但是对于 Collections,它不是,本身也是一个集合,即使是处理完了,也能还被接着调用。

我可以给大家举个例子:这样大家就好理解了:

    List<String> list = new ArrayList<>();
//采用工具类往集合中一并添加元素 Collections.addAll(list, "a", "b", "c", "d");
list.sort(new Comparator<String>() { @Override public int compare(String o1, String o2) { return o2.charAt(0) - o1.charAt(0); } });
复制代码

而对于 Stream 而言,它就是排序完后就结束了,转为下一个 Stream。@Testpublic void testSort() {

    List<String> list = new ArrayList<>();
//采用工具类往集合中一并添加元素 Collections.addAll(list, "a", "b", "c", "d");
Stream<String> sorted = list.stream().sorted();}
复制代码

这样对比,你们就明白了吧。

6️⃣Stream 创建方式

上一期第四点也是讲述了其 Stream 流,而这一期,我们就要真正的来学习,到底如何使用它,毕竟学以致用就是这么来的,希望你们在学完后,也能对此有一定的启发与实战练习,能把它用上当前的项目上,毕竟用过后,还是很便捷的,对于其中有些 api 比起自己手动处理真的方便不少,而且执行效率也比你自己处理的快得多。

说了这么多,可能大家都还不是很清楚 Stream 到底怎么创建,并且它有几种创建方式呢?这点你们大家有课余时间自行了解过吗?除了最直接的创建方式,就是直接对集合进行调用 stream()方法即可,就是通过集合的方式,那除了这种方式还有其他的吗?

如下是我总结的四种创建 Stream 流的方法:

  • 通过集合创建 Stream 流。

比如:list.stream();

  • 通过数组创建 Stream 流。

比如:Arrays.stream(arr);

  • 通过 Stream.of()方法 Stream 流。

比如:Stream.of("a","b");

  • 通过 Stream.iterate(),创建无限流。

比如:Stream.iterate()

如下,我具体展开给大家讲解一下吧,具体如何创建,并且实测如何玩转 Stream 流。

第一种:通过集合创建 Stream 流。

代码演示如下:

/**     * 第一种:通过集合创建Stream流     */    @Test    public void testCreateStream1() {
//创建一个集合 //存放全班同学姓名集合 List<String> stus = new ArrayList<>(); stus.add("马超"); stus.add("李白");
//使用Stream计数。 long count = stus.stream().count(); }
复制代码

第二种:通过数组创建 Stream 流。

代码演示如下:

  /**     * 第二种:通过数组创建Stream流     */    @Test    public void testCreateStream2() {
//创建一个数组 String[] arr = new String[10]; long count = Arrays.stream(arr).count(); }
复制代码

第三种:通过 Stream.of()方法 Stream 流。

代码演示如下:

/**     * 第三种:通过Stream.of()方法Stream流     */    @Test    public void testCreateStream3() {
//定义一个数组。 String[] arr = new String[10]; long count = Stream.of(arr).count(); }
复制代码

第四种:通过 Stream.iterate(),创建无限流。

代码演示如下:

    /**     * 第四种:通过Stream.iterate(),创建无限流。     */    @Test    public void testCreateStream4() {        Stream<Integer> stream = Stream.iterate(0, x -> x + 2).limit(10);        long count = stream.count();
System.out.println(count); }
复制代码

如上我需要解释一下,代码啥意思,这是从 x=0 开始,然后获取 0-10 之间的偶数,然后再计数 0-10 之间共有多少个偶数。

...

而对于具体打印,就是计数该集合或数组中的元素个数。比如对于示例 1 返回自然是 2。因为总共就两个元素。

打印结果截图如下:

7️⃣Stream 操作三步骤

我们在上一节点,学完了对 Stream 流如何创建,及多种方式如何进行创建,对吧,那你们知道其 Stream 流的操作步骤不?因为直接用,肯定不会很太注意它是如何工作的。

如下是总结的 Stream 操作的三步骤,

  • 创建 Stream。

  • 操作 Stream。

  • 终止操作。

具体怎么理解呢?

第一步:创建 Stream,对于一个数据源(如集合、数组),先获取一个流。接着是操作 Stream 流,讲的是一个中间操作链,对数据源进行对应的操作,其中可以进行多次操作,每操作一次,就生成一个新的 Stream。而最后一步,终止操作,就是执行中间链操作处理出结果。

具体我用代码给大家演示一下吧:

@Test    public void testOperaStream() {        //创建一个集合        //存放全班同学姓名集合        List<String> stus = new ArrayList<>();        stus.add("马超");        stus.add("化马");        stus.add("李白");        stus.add("马儿");
//筛选出带姓马的同学 Stream<String> stream1 = stus.stream().filter(stu -> stu.startsWith("马")); //对姓马的同学进行排序 Stream<String> stream2 = stream1.sorted(); //打印排序后姓马的同学名字 stream2.forEach(stu -> { System.out.println(stu); }); }
复制代码

先是通过一个集合来创建 stream 流,完了之后其中操作了其 stream 流,其中 stream1、stream2 就是在操作 stream 的中间过程,然后最后打印输出是终止操作。

如下是最终执行结果。

所以对于 stream 流,并不是你们想象的那么难,只要你们能好好对其进行挖掘,并且学一下常用的那些 api 方法,其实就足够了。

... ...

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

四、文末

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

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

wished for you successed !!!

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

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

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

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

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


发布于: 刚刚阅读数: 3
用户头像

喵手

关注

还未添加个人签名 2022.07.05 加入

还未添加个人简介

评论

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