Java基础——Lamabda表达式

Lamabda表达式

使用Lamabda表达式,是编程思想的转变!

个人理解:Lamabda表达式可以简化代码,让我们可以重点关注“做什么”,可以减少代码量,而且可以减少之前编程时由于java语法而不得不创建的代码。

比如:我要寄快递,我只需要把快递给快递员就好了。这个寄出去的快递它具体是怎么到达目的地的就不是我要关心的


多线程代码举例:

public class Lamabda01 {
    public static void main(String[] args) {
        new Thread(()->{
            System.out.println(Thread.currentThread().getName()+" 新线程创建了");
        }).start();
    }
}

成功运行


Lamabda表达式的标准格式:

​ 由三部分组成:

​ 一些参数

​ 一个箭头;‘

​ 一段代码

格式

​ (参数列表) ->{一些重写方法的代码;}

解释说明格式:

​ “()”括号代表接口中抽象方法的参数列表,没有参数就空着,有参数就写进去,多个参数用逗号分隔开

​ “->”箭头代表传递的意思,把参数传递给方法体{}

​ “{}”大括号代表重写接口的抽象方法的方法体


练习:

题目1:使用Lamabda表达式标准格式(无参无返回)

给定一个厨子接口,内含唯一的抽象方法makeFood,且无参数、无返回值。如下

public class CookTest {
    public static void main(String[] args) {
        //调用invokeCook方法,参数是Cook接口,传递Cook接口的匿名内部类对象
        invokeCook(new Cook() {
            @Override
            public void makeFood() {
                System.out.println("打印一句话");
            }
        });

        //使用Lamabda表达式简化匿名内部类的书写
        invokeCook(()->{
            System.out.println("打印一句话");
        });

    }

    //定义一个方法,参数传递Cook接口,方法内部调用Cook接口中的方法makeFood
    public static void invokeCook(Cook cook){
        cook.makeFood();
    }
}

运行结果:


题目2

需求:

​ 使用数组存储多个Person对象

​ 对数组中的Person对象使用Arrays的sort方法通过年龄进行升序排序

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;

public class PersonTest {
    public static void main(String[] args) {
        //创建数组,使用数组存储多个Person对象
        Person[] people = {
                new Person("牛大",48),
                new Person("牛二",28),
                new Person("牛三",18)
        };
/*        //对Person对象使用Arrays类中的sort方法,按照年龄进行升序排序
        Arrays.sort(people, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge()- o2.getAge();//表示升序排序
            }
        });*/

        //使用Lamabda表达式简化匿名内部类
        Arrays.sort(people,(Person o1, Person o2)->{
            return o1.getAge()-o2.getAge();
        });

        //遍历数组
        for (Person person : people) {
            System.out.println(person);
        }
    }
}

运行结果:


题目3:使用Lamabda表达式标准格式(有参有返回)

需求:

​ 定义一个方法

​ 传递两个int类型的参数

​ 计算并打印两个参数的和

public class AdditionTest {
    public static void main(String[] args) {
        invokeAdditionI(5, 6, new AdditionI() {
            @Override
            public int Add(int a, int b) {
                return a+b;
            }
        });

        //使用Lamabda表达式简化匿名内部类
        invokeAdditionI(11,22,(int a,int b)->{
            return a+b;
        });

    }



    public static void invokeAdditionI(int a,int b,AdditionI additionI){
        int sum = additionI.Add(a,b);
        System.out.println(sum);
    }
}

运行结果:


Lamabda表达式省略格式

将上面几个例题,优化Lamabda代码,使用Lamabda省略格式

public class Lamabda01 {
    public static void main(String[] args) {
        new Thread(()->{
            System.out.println(Thread.currentThread().getName()+" 新线程创建了");
        }).start();

        //优化Lamabda代码,使用Lamabda省略格式
        new Thread(()->System.out.println(Thread.currentThread().getName()+" 新线程创建了")).start();
    }
}
public class CookTest {
    public static void main(String[] args) {
        //调用invokeCook方法,参数是Cook接口,传递Cook接口的匿名内部类对象
        invokeCook(new Cook() {
            @Override
            public void makeFood() {
                System.out.println("打印一句话");
            }
        });

        //使用Lamabda表达式简化匿名内部类的书写
        invokeCook(()->{
            System.out.println("打印一句话");
        });

        //优化Lamabda代码,使用Lamabda省略格式
        invokeCook(()->System.out.println("打印一句话"));

    }

    //定义一个方法,参数传递Cook接口,方法内部调用Cook接口中的方法makeFood
    public static void invokeCook(Cook cook){
        cook.makeFood();
    }
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;

public class PersonTest {
    public static void main(String[] args) {
        //创建数组,使用数组存储多个Person对象
        Person[] people = {
                new Person("牛大",48),
                new Person("牛二",28),
                new Person("牛三",18)
        };
/*        //对Person对象使用Arrays类中的sort方法,按照年龄进行升序排序
        Arrays.sort(people, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge()- o2.getAge();//表示升序排序
            }
        });*/

        //使用Lamabda表达式简化匿名内部类
        Arrays.sort(people,(Person o1, Person o2)->{
            return o1.getAge()-o2.getAge();
        });

        //优化Lamabda代码,使用Lamabda省略格式
        Arrays.sort(people,(o1, o2)->o1.getAge()-o2.getAge());

        //遍历数组
        for (Person person : people) {
            System.out.println(person);
        }
    }
}


posted @ 2021-05-04 11:46  牛牛ō^ō  阅读(177)  评论(0编辑  收藏  举报