通过阅读本文可以让你快速掌握Lambda的基本用法
引入背景:在jdk不断升级的过程中,为了让很长串的代码变得更加简洁,因此引入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)
-
- 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}
-
- /*
- * 自定义排序
- * */
- 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