【JavaSE】Lambda表达式(13)

引言

Old,Young

知识点总结

在这里插入图片描述

Lambda表达式

函数式编程思想

在这里插入图片描述

与面向对象编程思想不同的是,函数式编程思想的中心思想是“做什么,而不是怎么做”;而面向对象编程无论做什么都要先创建一个对象;基于函数式编程的这一特性,Lambda表达式就因此诞生了。

Lambda表达式的格式

先以创建一个打印一句话的线程为例,来说明Lambda表达式。

public class MyThread1{
    public static void main(String[] args) {
        //用匿名内部类创建线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"线程创建成功");
            }
        }).start();
        //用Lambda表达式简化
        new Thread(
        ()->{System.out.println(Thread.currentThread().getName()+"线程创建成功");}
        ).start();
    }
}

我们可以看到,我们创建的线程就是为了打印一段话,而用匿名内部类会多出许多的无用代码
Lambda表示式

() -> {}
1. () 代表参数列表
2. -> 用于传递
3. {} 中是要执行的任务

Lambda表达式练习

1.无参无返回值的情况
题目
在这里插入图片描述
代码实现

public class Demo02 {
    public static void main(String[] args) {
         invokeCook(new Cook() {
             @Override
             public void makefood() {
                 System.out.println("吃饭了");
             }
         });
         //匿名内部类
        System.out.println("====================");
        //lambda表达式
        invokeCook(()->{
            System.out.println("吃饭了");
        });
    }
    public static void invokeCook(Cook cook){
        cook.makefood();
    }
}

2.对人按年龄排序
在这里插入图片描述
代码实现

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

class Person{
    public int age;
    public String name;
    public Person(String name,int age){
        this.age=age;
        this.name=name;
    }
    @Override
    public String toString(){
        return "[姓名="+this.name+",年龄="+this.age+"]";
    }
}
public class Demo03 {
    public static void main(String[] args) {
        Person[] arr= {
            new Person("高冷",10),
            new Person("刘岩",18),
            new Person("敬汉卿",20)
        };
        //匿名内部类
//        Arrays.sort(arr, new Comparator<Person>() {
//            @Override
//            public int compare(Person o1, Person o2) {
//                return o1.age-o2.age;
//            }
//        });
        //lambda表达式
         Arrays.sort(arr,(Person o1,Person o2)->{ return o1.age-o2.age; });
        for(Person p:arr){
            System.out.println(p);
        }
    }
}

Lambda省略格式

Lambda表达式是可推导的,因此可以省略部分内容;
可推导是指能够根据前后语段推导出来这部分的内容。
省略格式

  • ()参数列表中的数据类型可不写;
  • ()参数列表中有且仅有一个参数时,()和数据类型都可不写;
  • {…}中只有一段代码时,{return , 分号,{} }都可不写;
Arrays.sort(arr,(Person o1,Person o2)->{ return o1.age-o2.age; });
//这两个效果是一样的;
Arrays.sort(arr,(o1,o2)->o1.age-o2.age);

Lambda表达式使用条件

必须要有接口,且接口得是函数式接口;所谓函数式接口就是有且仅有一个抽象方法需要被重写的接口

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高冷小伙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值