您当前的位置:首页 > 计算机 > 编程开发 > Java

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

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

前言

通过阅读本文可以让你快速掌握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

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