Lambda表达式的学习小结

从Java8开始 sun公司推出了Lambda表达式 这是一种函数式编程思想。

什么是函数式编程思想呢?

面向对象的思想:
做一件事情,找一个能解决这个事情的对象,调用对象的方法来完成这件事情

函数式编程思想:
只要能够获取到结果,谁去做,怎么做的都不重要,也不去关注,函数式编程思想重视的是结果,不重视实现的过程。

Lambda表达式的使用前提:
1.使用Lambda表达必须具有接口,且要求接口中有且仅有一个抽象方法。无法是JDK内置的Runnable、
Comparator接口还是自定义的接口,只有当接口的抽象存在且唯一时才可以使用Lambda表达式
2.使用Lambda必须具有上下文推断
也就是方法的参数或局部变量类型必须为Lambda表达式对应的接口类型才能使用Lambda作为该接口的实例
备注
:有且仅有一个抽象方法接口,称为“函数式接口”

使用格式:
Lambda表达式由三个部分组成:
1.一些参数
2.一个箭头
3.一段代码

格式:(参数列表)->{一些重写的代码}

解释说明格式:
():小括号里面是接口中抽象方法的参数列表,没有参数就空着,有参数就写出参数,多个参数使用逗号分隔
->:传递的意思,把参数传递给方法体{}里面使用
{}:重写接口的抽象方法的方法体
eg:

public class test{
    public static void main(String[] args){

    //使用匿名对象和匿名内部类来创建一个新线程 使用匿名内部类不用写实现接口类,但代码看起来很复杂
    new Thread(new Runnable() {
        @Override
        public void run() {

            System.out.println(Thread.currentThread().getName()+": 创建了");
        }
    }).start();

    //使用匿名对象和Lambda表达式来创建一个新线程 从代码的角度来看,用Lambda表达式太爽了
    //没有参数()里面空着就让它空着
    new Thread(()->{
            System.out.println(Thread.currentThread().getName()+": 创建了");
        }
    ).start();

    }

Lambda表达式更简便模式

凡是根据上下文推导出来的内容,都可以省略书写格式

1.(参数列表):括号中参数列表类型,可以省略不写

2.(参数列表):括号的参数如果只有一个,那么类型和()都可以省略

3.{一些重写的代码}:如果{}中代码只有一行,无论是否有返回值都可以省略 {} return 分号

注意:要省略{} return ,分号必须全都一起省略
eg:

package cn.heima.lambda_demo.demo03;

import java.util.*;

public class PersonDemo {
    public static void main(String[] args) {
        List<Person> list=new ArrayList<>();

        list.add(new Person("张天爱",29));
        list.add(new Person("佟丽娅",35));
        list.add(new Person("古力娜扎",28));

        Collections.sort(list, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge()-o2.getAge();
            }
        });


        for (Person p:list){
            System.out.println(p);
        }

        System.out.println("================");
        //有参数有返回值的接口使用Lambda表达式
        Collections.sort(list, (Person o1, Person o2)->{
           return o1.getAge()-o2.getAge();
        });


        System.out.println("================");
        //最简便的Lambda表达式
        Collections.sort(list, ( o1, o2)->o1.getAge()-o2.getAge() );

        for (Person p:list){
            System.out.println(p);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值