首页 > 编程语言 >Java零基础入门-java8新特性(下篇)

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

时间:2024-04-04 09:04:31浏览次数:12  
标签:stus 下篇 stream Stream 创建 操作 集合 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️⃣什么是函数式接口

        总而言之:函数式接口,即适用于函数式编程场景的接口。而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。

    @Test
    public 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操作的三步骤,

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

        具体怎么理解呢?第一步:创建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方法,其实就足够了。

标签:stus,下篇,stream,Stream,创建,操作,集合,Java,java8
From: https://blog.csdn.net/weixin_66592566/article/details/125237327

相关文章

  • Java访问修饰符
    四种访问修饰符范围访问级别访问控制修饰符同类同包子类不同包公开 public允许允许允许允许受保护protected允许允许允许不允许默认 没有修饰符允许允许不允许不允许私有private允许不允许不允许不允许注意事项修饰符可以用来修......
  • golang和Java的简单介绍和对比
    一、golang1、Golang简介Golang,也称为Go,是由Google公司在2009年推出的开源编程语言,由罗伯特·格瑞史莫(RobPike)、肯·汤普逊(KenThompson)、罗勃·派克(RobertGriesemer)等人设计。Go语言的目标是在保持简单高效的编程模型的同时,更好地支持现代软件开发的需求,如网络编程......
  • java毕业设计大全
     链接:Java毕业设计列表2600套包含论文vx:Lunique0129  文档较大,请耐性等待,可用电脑打开,(CTRL+F)精准搜索题目关键词查询需要源码的同学添加微信,你有题目我就有项目包安装运行成功(两千多套)Java课程设计学习参考,对学计算机的大学生来说非常适合学习与参考。持续更新中。。......
  • java压缩图片
    java压缩图片 importjavax.imageio.ImageIO;importjava.awt.image.BufferedImage;importjava.awt.Graphics2D;importjava.awt.Image;importjava.io.File;importjava.io.IOException;publicclassImageResizer{publicstaticvoidresizeImage(Stringi......
  • 【阿里淘天笔试题汇总】2024-04-03-阿里淘天春招笔试题(第一套)-三语言题解(CPP/Pytho
    ......
  • Java Object类、Objects类
    Object类Object类是Java中所有类的根类,它提供了一些通用的方法,用于处理对象的基本行为。以下是Object类的一些主要特点:继承性:在Java中,除非特别指定,否则每个类都隐式地继承自Object类。这意味着即使没有明确地将一个类声明为继承自Object,它也会自动继承Object类的所有属性和......
  • 【阿里淘天笔试题汇总】2024-04-03-阿里淘天春招笔试题(第二套)-三语言题解(CPP/Pytho
    ......
  • Java Math类、System类、Runtime类
    Math类Java中的Math类是一个包含各种数学方法的内置类,它提供了一系列静态方法,用于执行各种数学计算。具体来说,Math类中的方法可以分为以下几类:基本数学运算:包括加法、减法、乘法和除法等。三角函数:如正弦(sin)、余弦(cos)和正切(tan)等。指数和对数函数:包括指数(exp)和自然对数(log)等......
  • Java最短路径算法知识点(含面试大厂题和源码)
    最短路径算法是计算机科学和图论中的核心问题之一,它旨在找到从一个顶点到另一个顶点或在所有顶点之间的最短路径。这个问题在多种实际应用中都非常重要,如网络路由、交通规划、社交网络分析等。以下是一些与最短路径算法相关的知识点:Dijkstra算法:由荷兰计算机科学家艾兹......
  • Java归并排序知识点(含面试大厂题和源码)
    归并排序是一种有效的排序算法,采用分治法(DivideandConquer)策略。它将数组分成两半,对每一半递归地进行排序,然后将两个有序的半部分合并成一个整体的有序数组。归并排序在最坏情况、平均情况和最好情况下都保持(O(n\logn))的时间复杂度,是一种稳定的排序算法。由于其分而治......