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

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

时间:2024-04-04 09:04:44浏览次数:18  
标签:Java 入门 Stream 如下 names java8 表达式 lambda

一、本期教学目标

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

二、概述

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

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

三、正文

1️⃣java8新特性

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

  • Lambda表达式
  • 函数式接口
  • 方法引用与构造器引用
  • Stream API
  • 接口的默认方法与静态方法
  • 新时间日期API
  • 其他新特性

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

2️⃣什么是Lambda表达式

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

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

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

        ...

标签:Java,入门,Stream,如下,names,java8,表达式,lambda
From: https://blog.csdn.net/weixin_66592566/article/details/125199502

相关文章

  • Java零基础入门-java8新特性(下篇)
    一、概述     ​上几期,我们是完整的学完了java异常类的学习及实战演示、以及学习了线程进程等基础概念,而这一期,我们要来玩点好的东西,那就是java8,我们都知道java8是自2004年发布java5之后最重要且一次重大的版本更新,虽然我们的JDK环境也升级到了java1.8,但是在日常的开......
  • Java访问修饰符
    四种访问修饰符范围访问级别访问控制修饰符同类同包子类不同包公开 public允许允许允许允许受保护protected允许允许允许不允许默认 没有修饰符允许允许不允许不允许私有private允许不允许不允许不允许注意事项修饰符可以用来修......
  • golang和Java的简单介绍和对比
    一、golang1、Golang简介Golang,也称为Go,是由Google公司在2009年推出的开源编程语言,由罗伯特·格瑞史莫(RobPike)、肯·汤普逊(KenThompson)、罗勃·派克(RobertGriesemer)等人设计。Go语言的目标是在保持简单高效的编程模型的同时,更好地支持现代软件开发的需求,如网络编程......
  • Linux入门
    一,什么是LinuxLinux是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年首次发布,之后引起了广泛关注。它是由全世界的自由软件开发者共同参与的类UNIX兼容系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行......
  • 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)等......