Lambda 表达式- Java语法糖

文章介绍了Java中Lambda表达式的背景和使用,包括三种方法形式:匿名内部类、外部类和Lambda简化。Lambda是Java8引入的特性,允许将函数作为参数传递,简化了代码。同时,文章提到了功能接口的概念,即只有一个抽象方法的接口,常用于Lambda表达式。
摘要由CSDN通过智能技术生成

目录

一、出现背景

Java中使用方法的三种形式

方式一

方式二

方式三

二、Lambda 表达式简介

三、Lambda 表达式的结构

四、功能接口(Functional interface)


一、出现背景

Java是面向对象的语言,除了8种简单数据类型,Java中的一切都是对象,例如 数组,字符串等,每个类创建的实例也是对象。在Java中定义的函数或方法不可能完全独立,也不能把方法作为参数或返回一个实例。

Java是面向对象的语言,属性、方法等要包装在类中,最终包装在创建的对象中, 如果需要使用某个方法时,就必须要创建对象,传递对象。

所以在Java8之后,提出了函数式编程,把函数(方法)作为参数传递。

例如------

public class LambdaDemo1 {
    public void eat(){
    }
    public void test(Lambda lambda){
        lambda.eat();
    }
}

test要使用eat方法,需要将对象传入调用。

面向对象的语言中,一切都封装在类中 , 要创建具体的对象使用。

public class LambdaDemo1 {
    public void eat(){
    }
}
public class LambdaDemo2 {

    public void test(LambdaDemo1 lambdaDemo1){
        lambdaDemo1.eat();
    }

    public static void main(String[] args) {
        LambdaDemo2 lambdaDemo2=new LambdaDemo2();

        LambdaDemo1 lambdaDemo1=new LambdaDemo1();

        lambdaDemo2.test(lambdaDemo1);
    }
}

Java中使用方法的三种形式

创建一个Car类 有号码 名字两个属性

public class Car_Demo3 {
    int num;
    String  name;

    public Car_Demo3(int num, String name) {
        this.num = num;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Car{" +
                "num=" + num +
                ", name='" + name + '\'' +
                '}';
    }
}

创建Car对象,并且对Car对象进行排序

public static void main(String[] args) {
        ArrayList<Car_Demo3> arrayList=new ArrayList();
        Car_Demo3 c1=new Car_Demo3(1,"A1");
        Car_Demo3 c2=new Car_Demo3(2,"A2");
        Car_Demo3 c3=new Car_Demo3(3,"A3");
        Car_Demo3 c4=new Car_Demo3(4,"A4");
        arrayList.add(c1);
        arrayList.add(c2);
        arrayList.add(c4);
        arrayList.add(c3);
    	
    //方式一
   arrayList.sort(new Car_Comparator);
        System.out.println(arrayList);

方式一

外部类

public class Car_Comparator implements Comparator<Car_Demo3> {

    @Override
    public int compare(Car_Demo3 o1, Car_Demo3 o2) {
        return o1.num-o2.num;
    }
}

方式二

内部类

public class Car_Demo3 {
    int num;
    String  name;

    public Car_Demo3(int num, String name) {
        this.num = num;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Car{" +
                "num=" + num +
                ", name='" + name + '\'' +
                '}';
    }
    //作为内部类
    class Car_Comparator implements Comparator<Car_Demo3> {

        @Override
        public int compare(Car_Demo3 o1, Car_Demo3 o2) {
            return o1.num-o2.num;
        }
    }
}

方式三

匿名内部类

// 匿名内部类
        arrayList.sort(new Comparator<Car_Demo3>() {
            @Override
            public int compare(Car_Demo3 o1, Car_Demo3 o2) {
                return o1.num-o2.num;
            }
        });

二、Lambda 表达式简介

Lambda 表达式是一个匿名函数,直接把一个函数作为参数传递,简化匿名内部类

arrayList.sort((o1,o2)->{
            return o1.num-o2.num;
        });

三、Lambda 表达式的结构

Lambda 表达式可以具有零个,一个或多个参数。

可以显式声明参数的类型,也可以由编译器自动从上下文推断参数的类型, 例如 (int a,int b)与 (a,b)相同

(参数列表)->{ 方法体 }

@FunctionalInterface
public interface Fly {
    void fly();
}
public class Bird {
    void birdFly(Fly fly){
        fly.fly();
    }

    public static void main(String[] args) {
        Bird bird=new Bird();
        bird.birdFly(()->{
            System.out.println("鸟会飞");
        });
    }
}

四、功能接口(Functional interface)

@FunctionalInterface 标注接口是一个功能函数接口,专为Lambda表达式提供, 此时接口中只能有一个抽象方法。

如果尝试在其中添加一个抽象方法,则会抛出编译时错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值