2025年5月18日 星期日 乙巳(蛇)年 二月廿 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Java

Jdk1.8引入的 Lambda 表达式是什么

时间:05-13来源:作者:点击数:48

前言

通过阅读本文可以让你快速掌握Lambda的基本用法

一、Lambda引入

引入背景:在jdk不断升级的过程中,为了让很长串的代码变得更加简洁,因此引入Lambda。它用简单扼要的语法来表达某种功能所包含的操作。在程序遍历访问集合中元素的场合,运用Lambda表达式可以打打简化操纵集合的程序代码。

二、Lambda表达式语法

先来一个简单的用Lambda用法输出"hello world!"

1、普通写法

  • public class csdn_lambda {
  • public static void main(String[] args) {
  • new Runnable() {
  • public void run() {
  • System.out.println("hello wrold!");
  • }
  • }.run();
  • }
  • }

2、Lambda写法

  • public class csdn_lambda {
  • public static void main(String[] args) {
  • Runnable runnable = ()-> System.out.println("hello world!");
  • runnable.run();
  • }
  • }

通过对比我们会发现lambda表达式大大简化了代码。初学者看肯定是一头雾水,其实与看,上面的lambda函数中由两个部分组成:接口类型+函数实现

接口类型:Runnable runnable 它是一个Runnable接口类型实例

函数实现: ()-> System.out.println(“hello world!”);

重点就是看Lambda表达式是怎么实现函数了

在这个案例中,Runnable接口中有一个run()方法

  • public abstract void run(); //Runnable中的抽象方法

重点:所以说()其实就是代表run中的参数,这里run没有定义参数,括号里也就什么都不用加。System.out.println(“hello world!”);就是在run函数中的实现内容。

让我们看看有参数的情况下,lambda表达式是怎么写的

  • /*
  • * 方法中含有参数,并且有返回类型,但是,多行语句
  • * */
  • class Test002{
  • public static void main(String[] args) {
  • //实现lmabda函数
  • Dao dao = (x,y)->x+y;
  • int result = dao.sum(1, 2);
  • System.out.println("结果:"+result);
  • }
  • interface Dao {
  • int sum(int i, int n);
  • }
  • }

(x,y)->x+y;

(x,y)中x和y就是sum函数的两个参数了

x+y;是sum函数中的实现部分,sum函数直接返回了x+y的值

总结:Lambda表达式的基本语法为:

  • (Type1 param1,Type2 param2,...,TypeN paramN)->{
  • statment1;
  • statment2;
  • //..
  • return statmentM;
  • }

(1)当Lambda表达式的参数个数只有一个时,可以省略小括号,例:

  • name->{
  • System.out.println(name);
  • return;
  • }

(2)当Lambda表达式只包含一条语句时,可以省略大括号、语句结尾的分号。此外,当return语句没有返回值时也可以省略。

  • name->System.out.println(name)

三、Lambda实现集合的forEach()方法

  • public class csdn_lambda {
  • public static void main(String[] args) {
  • ArrayList<Person2> list = new ArrayList<>();
  • list.add(new Person2("tom",12));
  • list.add(new Person2("candy",10));
  • list.forEach(System.out::println);
  • }
  • }

重写了toString()方法,输出:

  • Person2{name='tom', age=12}
  • Person2{name='candy', age=10}

四、Lambda实现对集合排序

  • /*
  • * 自定义排序
  • * */
  • class Test003{
  • public static void main(String[] args) {
  • //使用函数进行自定义排序
  • Comparator<Integer> comparab =(x, y)->y-x; //<0升序 >0降序 =0不变
  • //创建可以排序的集合
  • TreeSet<Integer> set = new TreeSet<>(comparab);
  • set.add(3);
  • set.add(10);
  • set.add(50);
  • System.out.println(set);
  • }
  • }

Comparator是一个自定义比较器,通过返回的数来判断升序还是降序还是不改变

(x, y)->y-x 重新实现了int compare(T o1, T o2);方法,返回值是y-x

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门