java-Lambda表达式

Lambda表达式

基础知识

  • 面向对象思想,做一件事,找一个可以解决这件事的对象,调用对象方法,完成事件
  • 函数式思想编程,只要能获取结果,怎么做谁去做,都不重要,重视结果,不重视过程
package lambdaText;
/*
    Lambda表达式的标准写法
        三部分组成
            1.一些参数
            2.一个箭头
            3.一段代码
        格式
            (参数列表) -> {方法体}
        格式说明
            (),接口中抽象方法的参数列表,没有就空着,有参就写,多参逗号分隔
            ->,传递的意思,把参数传递给方法体
            {},重写接口中抽象的方法体
*/
public class Demo01Lambda {
    public static void main(String[] args) {
        //使用匿名内部类方式,实现多线程,有冗余
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("开启线程");
            }
        }).start();

        //使用Lambda表达式开启多线程,简单
        new Thread(()->{
                System.out.println("开启线程");
            }
        ).start();
    }
}
  • 匿名内部类
    • 可以帮我们省去类的定义
    • 语法复杂

无参无返回值练习

package lambdaText;
/*
    需求
        给定一个厨子cook接口,内含唯一抽象方法makecook,且无参无返回值
        使用Lambda表达式,invokecook方法,打印“吃饭”
*/
public class Demo02 {
    public static void main(String[] args) {

        //调用invokeCook方法,参数是Demo02Text接口,传递接口中的匿名内部类对象
        invokeCook(new Demo02Text() {
            @Override
            public void makeFood() {
                System.out.println("吃饭了");
            }
        });
        //使用Lambda表达式简化
        invokeCook(() ->{
            System.out.println("吃饭了");
        });
    }
    //定义一个方法传递Demo02Text接口,方法内部调用Demo02Text内部的方法makeFood方法
    public static void invokeCook(Demo02Text cook){
        cook.makeFood();
    }
}

有参数有返回值

package lambdaText;

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

/*
    lamvda表达式,有参有返回值
        1.使用数组储存多个Person对象
        2.对储存的对象使用Array中的sort方法进行年龄生序排列
*/
public class Demo03 {
    public static void main(String[] args) {
        //1.使用数组储存多个Person对象
        Demo03Person[] arr={
                new Demo03Person("热巴",18),
                new Demo03Person("娜扎",19),
                new Demo03Person("穷哈",17)
        };
        //2.对储存的对象使用Array中的sort方法进行年龄生序排列
     /*   Arrays.sort(arr, new Comparator<Demo03Person>(){
            @Override
            public int compare(Demo03Person o1, Demo03Person o2) {
                return o1.getAge()-o2.getAge();//升序前减后
            }
        });*/

        //使用Lambda方式,简化匿名内部类
        Arrays.sort(arr, (Demo03Person o1, Demo03Person o2)-> {
                return o1.getAge()-o2.getAge();//升序前减后
            }
        );
        for (Demo03Person demo03Person : arr) {
            System.out.println(demo03Person);
        }
    }
}

有参数有返回值,自定义接口

package lambdaText;
/*
    lamvda表达式,有参有返回值
        1.给定计算器calculator接口,内含抽象方法cala将两个int数加和
        2.使用Lambda表达式invokecala,计算相应题目
*/

public class Demo04 {
    public static void main(String[] args) {
        invokecala(100, 100, new Calaulator() {
            @Override
            public int cala(int a, int b) {
                return a+b;
            }
        });

        //使用Lambda
        invokecala(100,200,(int a,int b)->{
            return a+b;
        });
    }
    /*
        定义一个方法
        参数传递两个int数
        参数传递Calculator接口
        方法中调用Calculator接口中的方法cala,计算和
    */
    public static void invokecala(int a,int b,Calaulator c){
        int sum = c.cala(a, b);
        System.out.println(sum);
    }
}

Lambda表达式使用前提

  • 使用Lambda表达式,必须具有接口,且要求接口中有且只有一个抽象方法
  • 使用Lambda表达式,必须具有上下文推断
  • 有且只有一个抽象方法接口,称为函数式接口
package lambdaText;

import java.util.Arrays;

/*
    Lambda表达式,可推到,可省略
    凡根据上下文推导出来的内容,都可以省略
    可以省略的内容
        1.(参数列表),括号中参数列表中的数据类型可以不写
        2.(参数列表),括号中的参数只有一个,可以不写括号()
        3.{一些代码},如果括号中的代码只有一行,无论是否有返回值,都可以省略({},return,分号(;))
            注意,要省略{},return,分号(;)必须一起省略
*/
public class Demo05 {
    //使用Lambda表达式简化
    invokeCook(() ->{
        System.out.println("吃饭了");
    });
    //继续省略
    invokeCook(() -> System.out.println("吃饭了")
    );

    //使用Lambda方式,简化匿名内部类
        Arrays.sort(arr, (Demo03Person o1, Demo03Person o2)-> {
        return o1.getAge()-o2.getAge();//升序前减后
    }
        );
    //继续省略
          Arrays.sort(arr, (o1,o2)-> o1.getAge()-o2.getAge()//升序前减后
        );

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值