首页 > 编程语言 > 详细

Java基础——Lamabda表达式

时间:2021-05-04 13:51:32      阅读:15      评论:0      收藏:0      [点我收藏+]

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);
        }
    }
}

技术分享图片


Java基础——Lamabda表达式

原文:https://www.cnblogs.com/niuniu-/p/14729179.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!