✌️✌️✌️在写之前,我在考虑是否要写这篇文章,然而当我查阅“lambda表达式”的相关内容的时候,我发现大量的文章都出现了冗余的现象,文章的篇幅过于夸张,严重影响了大家阅读的兴趣,因此我决定写一篇关于lambda表达式的文章,让大家能够在一定程度上对lambda表达式有一定的理解。希望能够对你在Java的学习中起到一定的帮助。

Lambda概述

Lambda表达式是JDK8开始后的一种新语法形式

作用:简化匿名内部类的代码写法

格式:

(匿名内部类被重写方法的形参列表)->{被重写方法的方法体代码
}
注:->是语法形式,无实际意义

首先我们先定义一个抽象类,通过匿名内部类重写其方法,再对其进行简化,比较二者之间有何变化:

使用Lambda表达式之前:

public static void main (String[] args){People p = new People(){@Overridepublic void run(){System.out.println("小学生跑的很慢");}};p.run();    }
abstract class People{public abstract void run();
}

使用Lambda表达式之后:

People p = ()->{System.out.println("小学生跑的很慢");
};
//会出现报错

会出现报错,这是为什么呢?原因在于前面对于Lambda表达式的定义并不清晰,Lambda表达式并不能简化所有匿名内部类,其只能简化函数式接口匿名内部类的写法形式,且接口中有且仅有一个抽象方法,通常,我们会再接口上加上一个@Functionalinterface注解,标记该接口必须是满足函数式接口。

真正意义上通过Lambda表达式简化:

@FunctionalInterface//加上这个注解必须是函数式接口,且只有一个抽象方法
interface People{void run();
}
//简化之前的匿名内部类
People p = new People(){@Overridepublic void run(){System.out.println("小学生跑的很慢!");}
};
//简化之后
People p = () -> {System.out.println("小学生跑的很慢!");
};

另外,也可以将其作为参数代入方法中去使用:

//在原来的基础上定义一个pk方法
public static void pk(People p){System.out.println("跑步情况如何:")p.run();
}
//不使用Lambda的情况下:
pk(p);//需要在定义匿名内部类之后,将p代入;
//使用Lambda的情况:
People p = () -> {System.out.println("小学生跑的很慢!");
};
pk(() -> {System.out.println("小学生跑的很慢!");
});
//由于等号右边即是People创建的对象p,因此可以可以直接将其代入

Lambda的好处:

Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁、更灵活的代码,作为一种更紧凑的代码风格,使Java语言表达能力得到了提升。

Lambda实战的作用

在之前的学习过程中,我们学习过了Arrays的相关知识,其中有一个sort方法(可以将数组升序或降序排列),它其实也是接口类,并且只有一个抽象方法:

//精简之前:
Arrays.sort(grade,new Comparator<Integer>(){@Overridepublic int compare(Integer o1,Integer o2){return o2 -o1;
}
});
//精简之后:
Arrays.sort(grade,(Integer o1,Integer o2) -> {return o2 -o1;
});

Lambda表达式省略规则

  • 参数类型可以省略不写
//参考前面的实战例子
Arrays.sort(grade,(Integer o1,Integer o2) -> {return o2 -o1;
});
//省略参数类型之后
Arrays.sort(grade,( o1, o2){return o2 -o1;
});
  • 如果只有一个参数,参数类型可以省略,同时()也可以省略
//简单引用一个单个参数的例子,不需要了解其具体含义
btn.addActionListener((ActionEvent e) -> {System.out.println("我是简单的例子。");
});
//简化之后:
btn.addActionListener( e -> {System.out.println("我是简单的例子。");
});
  • 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号
//参照上一条规则的例子
btn.addActionListener( e -> {System.out.println("我是简单的例子。");
});
//简化之后:
btn.addActionListener( e -> System.out.println("我是简单的例子。") );
  • 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写
//参照第一条规则的代码
Arrays.sort(grade,(Integer o1,Integer o2) -> {return o2 -o1;
});
//简化之后:
Arrays.sort(grade,( o1, o2)-> o2 -o1);

创作不易,给个三连

Java中的lambda表达式如何理解——精简相关推荐

  1. 如何开始使用Java中的Lambda表达式

    by Luis Santiago 路易斯·圣地亚哥(Luis Santiago) 如何开始使用Java中的Lambda表达式 (How to start working with Lambda Exp ...

  2. 如何在Java中使用Lambda表达式

    如何在Java中使用Lambda表达式 Lambda表达式是Java 8新增的一个非常强大的特性.它使得函数式编程在Java中变得更加容易和直观. Lambda表达式的基础知识 在Java中,Lamb ...

  3. 通俗理解Java中的Lambda表达式

    Lambda Lambda表达式支持将代码块作为方法参数, 允许使用更为简洁的方式实现抽象类或接口的抽象方法, 而不再是通过匿名内部类的方式, 它具有对某一方法重写或实现的功能; 接下来通过一个简单的 ...

  4. java中的lambda表达式学习

    Lambda表达式是给函数式接口(SAM接口)的变量或形参赋值的表达式. Lambda表达式替代了原来使用匿名内部类的对象给函数式接口(SAM接口)的变量或形参赋值的形式. java提供了大量的函数式 ...

  5. java lambda max_在Java中使用Lambda表达式查找Max

    小编典典 该方法Comparator.comparing(-)旨在创建一个Comparator使用基于对象属性的订单进行比较的.当使用lambda表达式i -> i(这是(int i) -> ...

  6. 【java】理解和运用Java中的Lambda

    1.概述 转载:理解和运用Java中的Lambda 前提 回想一下,JDK8是2014年发布正式版的,到现在为(2020-02-08)止已经过去了5年多.JDK8引入的两个比较强大的新特性是Lambd ...

  7. JAVA如何遍历arraylist数组,Java 程序使用Lambda表达式遍历ArrayList

    Java 程序使用Lambda表达式遍历ArrayList 在此示例中,我们将学习在Java中使用lambda表达式遍历数组列表的每个元素. 要理解此示例,您应该了解以下Java编程主题: 示例:将A ...

  8. 使用NetBeans Lambda支持在Java 8中使用Lambda表达式对列表进行排序

    作为JSR 335的一部分, Lambda表达式已从Java 8开始引入Java语言,这是Java语言的一个重大变化. 如果您想了解更多关于Lambda表达式以及JSR 335的信息,可以访问以下资源 ...

  9. Java 8:在新的Nashorn JS引擎中编译Lambda表达式

    在最近的一篇文章中,我了解了Java 8和Scala如何实现Lambda表达式. 众所周知,Java 8不仅引入了对Javac编译器的改进,而且还引入了全新的解决方案-Nashorn. 这个新引擎旨在 ...

最新文章

  1. JS每日一题: 小程序页面之间如何通信?
  2. C++ Primer 5th笔记(chap 13 拷贝控制) 实例1测试和结果分析
  3. flask貌似html文件里只能用flask指定的路径格式,css文件里则可用相对路径
  4. 北漂程序员边城的幸福生活
  5. 整理JS+FLASH幻灯片播放图片脚本代码
  6. 基于php的外卖订餐系统开题报告_订餐系统开题报告.doc
  7. vivox50pro鸿蒙系统,小米10至尊纪念版和vivox50pro+哪一款手机好
  8. 随机初始化(代码实现)
  9. java 队列实现_队列的实现(JAVA)
  10. java 生成pdf 下载_java生成PDF,并下载到本地
  11. EPL许可证人话翻译
  12. 《照明设计》ASAP高级光学系统分析软件 在线 技术文章
  13. 小屏幕android电视,神奇!只需一个方法,让电视当作手机屏幕!
  14. python化学公式配平_配平化学方程式的C++代码实现
  15. 解决windows下无法ctrl+A全选数据快捷键的问题
  16. 日本多城现共享单车 日网友:感受到中国式刺激
  17. docker执行权限问题Got permission denied while trying to connect to the Docker daemon socket
  18. 计算机专业排名2014,2014计算机考研院校排名
  19. 相机快门_向我的智能手机添加远程相机快门的最简单方法是什么?
  20. VUE计算属性如何带参数

热门文章

  1. COCO/VOC 数据集加速下载
  2. cmake 编译opencv 缺失opencv_ffmpeg.dll 、 opencv_ffmpeg_64.dll、ffmpeg_version.cmake等问题
  3. linux更换包管理工具,技术|5 个给 Linux 新手的最佳包管理器
  4. MyBatis报无效的列索引的错误
  5. 爬虫项目四:2021最新测试可用淘宝爬虫
  6. 线性稳压器LDO并联在输入输出端二极管的作用
  7. Java毕业设计合集大推送
  8. html 中返回上一步页面,(移动端)在APP中嵌入H5网页,返回上一步返回APP菜单首页...
  9. 法规标准-GB/T 39323标准解读(2020版)
  10. VUE | 好看的 404 页面