首页 > 编程语言 >Java版本jdk8的特性Lambda表达式详解

Java版本jdk8的特性Lambda表达式详解

时间:2024-07-18 18:54:31浏览次数:10  
标签:Java list jdk8 Student new 方法 表达式 Lambda

面向对象编程思想和函数式编程思想的区别

面向对象编程:重点是对象,强调的是对象的状态和行为。面向对象编程使用类和实例来封装数据和行为,这可以让代码更加模块化和易
于维护。
函数式编程:重点是函数,强调的是函数的输入和输出,而不是对象的状态。函数式编程通常使用纯函数,即没有副作用的函数,这可以
避免一些问题,例如并发问题和不可变性。可以理解为强调结果,不强调过程。

Lambda表达式

Lambda表达式是基于函数式编程思想诞生的jdk8版本的特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。

Lambda表达式定义格式

( )->{ }:( )是重写方法的参数位置,->是将参数传递到方法体中,{ }是重写方法的方法体

Lambda表达式使用前提

必须是函数式接口做方法参数传递 。函数式接口是有且只有一个抽象方法的接口,用@FunctionalInterface去检测,如果出现两个抽象方法就会报错。
在这里插入图片描述

Lambda表达式省略规则

  1. 重写方法的参数类型可以干掉
  2. 如果重写方法只有一个参数,所在的小括号可以干掉
  3. 如果方法体中只有一句话,那么所在的大括号以及分号可以干掉
  4. 如果方法体中只有一句话并且带return的,那么所在的大括号,分号以及return 可以干掉
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private Integer id;
    private String name;
}

不使用Lambda表达式

public class Main {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        list.add(new Student(1,"张三"));
        list.add(new Student(100,"李四"));
        list.add(new Student(5,"王五"));
        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getId()-o2.getId();
            }
        });
        System.out.println(list);
    }
}

可以看到是用Comparator函数式接口做方法参数传递
在这里插入图片描述

使用Lambda表达式

public class Main {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        list.add(new Student(1,"张三"));
        list.add(new Student(100,"李四"));
        list.add(new Student(5,"王五"));
        Collections.sort(list, (Student o1, Student o2)-> {return o1.getId()-o2.getId();});
        System.out.println(list);
    }
}

简化版本的Lambda表达式

重写方法的参数类型可以干掉

Collections.sort(list, (o1, o2)-> {return o1.getId()-o2.getId();});

如果方法体中只有一句话并且带return的,那么所在的大括号,分号以及return 可以干掉

Collections.sort(list, (o1, o2)-> o1.getId()-o2.getId());

得到的结果是一样的。
在这里插入图片描述

新手编写Lambda表达式步骤:

  1. 先看是否是函数式接口做方法参数传递,用@FunctionalInterface去检测。
  2. 调用方法以匿名内部类的形式传递实参,删除从new接口开始到重写方法的方法名这一部分,还有右边多出来的大括号。
  3. 在重写方法的参数后面,方法体的大括号前面加上 ->

标签:Java,list,jdk8,Student,new,方法,表达式,Lambda
From: https://blog.csdn.net/weixin_45797022/article/details/140349917

相关文章

  • Java多线程入门
    创建线程的三种方式继承Thread类classMyThreadextendsThread{@Overridepublicvoidrun(){for(inti=0;i<100;i++){System.out.println(getName()+""+i);}}publicstaticvoidmain(String[]args......
  • java-算数运算符
    ##6.6.1算数运算符|运算符|运算|范例|结果||------------|------------|------------|------------||+ | 正号 | +300 | 300| - | 负号 | b=4;-b | -4|||||| |+ | 加 | 5+5 | 10 || - | 减 | 7-4 | 3| ||||| |* | 乘 | 3*4 | 12|| / | 除......
  • 1.java编写命令
    #六java编写命令**第一步:先写注释(需求、思路),进行需求分析和设计**```需求:定义一个helloword小程序思路: 1.通过class关键字定义一个类,将代码编写到该类中 2.为了保证该类的独立运行,在类定义个主函数,格式publicstaticvoidmain{String[]args} 3.保存成一个扩展名为ja......
  • Javase-8.数组的练习
    1.查找数组中指定元素(二分查找)以升序数组为例,二分查找的思路是先取中间位置的元素,然后使用待查找元素与数组中间元素进行比较:如果相等,即找到了返回该元素在数组中的下标如果小于,以类似方式到数组左半侧查找如果大于,以类似方式到数组右半侧查找pub......
  • 2.java-注释
    ##6.1java的三种注释方式,方便用来调试程序。 ```注意:多行注释中不可以再有多行注释。 单行注释中可以有再有单行注释。 多行注释中可以再有单行注释```**注释添加的位置**``` 类上面添加文档注释 主函数上面添加多行注释 代码当中几乎话难懂会加单行注......
  • JavaWeb笔记_Response对象
    一.Response对象1.1Response对象概述a.专门负责给浏览器响应信息(响应行,响应头,响应体)的对象b.我们主要使用的是跟HTTP协议相关的Response对象:HTTPServletResponse,继承了ServletResponse,扩展了ServletResponse接口,提供了更多的方法,例如可以操作响应头,cookie等1.2Response......
  • 5.java命令程序介绍
    五java命令程序介绍 javac 编译工具:将原文件编译成计算机可以识别的语言 格式: javachello-world.java 执行完该命令后,在源文件的目录下会生成一个新的class文件,称之为运行文件 java 调用虚拟机(JVM)运行java的class文件(可执行文件名称) 格式: java+字节码文件......
  • 4.java程序开发体验-hello-World
    四java程序开发体验--helloworldjava代码格式:有开始(class)---区间({})有结尾()1.将java代码编写到扩展名为.java的文件中去。编写源文件classdemo{ publicstaticvoidmain(String[]args) { System.out.print("hellojava"); }}2.通过javac命令对该java文件进......
  • 3.java-环境搭建
    三java语言的环境搭建1.了解JREJDK JRE(javaruntimeenvironmentjava运行环境) 包括java虚拟机(JVM)和java程序所需的核心类库等,如果想要一个开发好的java程序,计算机中只需要安装JRE即可。 JDK(javadevelopmentkitjava开发工具包) jdk是提供给java开发人员使用的,其中包含......
  • 2.java介绍
    二java介绍1.java语言概述 是sun(Stanforduniversitynetwork斯坦福大学网络公司)1995年推出的一门高级编程语言 是一种面向Internet的编程语言 随着java技术在web方面的不断成熟,已经成为web应用程序的首选开发语言。 是简单易学的,完全面向对象,安全可靠,与平台无关的编程语言......