Lambda表达式

Lambda表达式

yi使用之前的写多线程程序中,为了创建一个Thread对象,要先创建一个Runable实现类的对象,为此还要先创建一个Runable接口的实现类(或者使用匿名内部类),重写run方法,但是所有的工作中,最重要的就是run方法里的线程任务,其他的都是不得已而为之,我们不想创建什么实现类,创建什么匿名内部类,只希望run方法里的方法体可以执行,Lambda表达式可以简化这些操作。

使用前提:

1、必须有接口

2、接口必须只有一个抽象方法(这样才知道到底是重写哪一个方法)

package cn.zhuobo.day12.lambda;

public class Demo01Lambda {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + " new thread task");
            }
        }).start();
        // 使用Lambda表达式改写上面的代码

        new Thread(() ->{
            System.out.println(Thread.currentThread().getName() + " new thread task");
            System.out.println("hahah");
        }
        ).start();
    }
}

Lambda表达式的标准格式:

有三部分组成:一些参数,一个箭头,一段代码

格式:

(参数) -> {一段重写代码}

一些参数:抽象方法中的参数列表,没有就空着,有多个就用逗号分割

一个箭头:表示把参数传递个方法体{},也就是花括号里的代码

一段重写的代码:花括号里的包括重写接口的方法的方法体

Lambda表达式的演示:无参数

package cn.zhuobo.day12.lambda;

public class CookMain {
    public static void main(String[] args) {
        // 这是之前的写法,method方法要使用Cook的对象作为参数,那就在参数列表里创建一个匿名内部类,并且重写Cook接口的makeFood方法
        method(new Cook() {
            @Override
            public void makeFood() {
                System.out.println("make a pizza");
            }
        });
        
// 使用Lambda表达式一样可以调用这个方法,不用创匿名内部类
        method(() -> {
            System.out.println("make a pizza");
        });
    }
    public static void method(Cook cook) {
        cook.makeFood();
    }
}

Lambda表达式的演示:有参数

对Person数组排序

package cn.zhuobo.day12.lambda;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Comparator;

public class PersonMain {
    public static void main(String[] args) {
        Person[] people = {new Person("aaa", 12),
                            new Person("bbb", 11),
                            new Person("ccc", 10)};
		// 重写Comparator接口的compare方法
        Arrays.sort(people, new Comparator<Person>() {// sort方法的参数是一个接口,可以创建匿名内部类
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge() - o2.getAge();// 年龄升序
            }
        });
		// 使用Lambda表达式,简化穿件匿名内部类
        Arrays.sort(people,(Person o1, Person o2) -> {// 括号的参数的上面要重写的方法的参数列表
            return o2.getAge() - o1.getAge();// 年龄降序
        });


        for (Person person : people) {
            System.out.println(person);
        }
    }
}
原文地址:https://www.cnblogs.com/zhuobo/p/10649126.html