JAVA学习笔记--Lambda表达式

Lambda表达式

假设我们需要对一串数组使用匿名内部类进行处理

public class Lambdats {
    public static void main(String[] args){
        //这里省略接口和匿名实现类
        Array ay = new Arry();
        int target[] = {1,2,3,4};
        //使用匿名内部类处理数组
        //传入target变量和COmmand()构造器
        ay.process(target , new Command(){
            //重写方法
            public void process(int target[]){
                int sum = 0;
                //数组编历
                for(int tmp : target){
                    sum = sum + tmp;
                }
                System.out.println("数组之和:" + sum);
            }
        });
    }
}

这里传入了process处理行为的方法,然后又要在匿名内部类中对其进行重写,显得繁琐

所以我们使用Lambda表达来简化代码

public class Lambdats {
    public static void main(String[] args){
        //这里省略接口和匿名实现类
        Array ay = new Arry();
        int array[] = {1,2,3,4};
        //使用匿名内部类处理数组
        //传入target变量和COmmand()构造器
        ay.process(array , (int target[])->{
                int sum = 0;
                //数组编历
                for(int tmp : target){
                    sum = sum + tmp;
                }
                System.out.println("数组之和:" + sum);
            
        });
    }
}

从这个例子可以看出,我们只传入了一个待处理的数组和一个process方法的形参列表就对process方法实现了重写

Lambda表达式组成

1.形参列表:形参列表运行省略形参类型,只有一个参数的时候甚至可以省略形参列表的括号

2.箭头(->)

3.代码块.如果Lambda代码块只包含一条语句,则Lambda表达式运行省略代码块的花括号.

运用例子

public class Lambdats {
    public static void main(String[] args){
        //对匿名实现类实例化
        Lambdamv lb = new Lambdamv();
        //使用Lambda表达式
        lb.dogmv(name -> System.out.println(name + "is running"));//省略了花括号,只有一条语句

        lb.addable((a,b)-> {
            int rs = 0;
            rs = a + b;
            System.out.println(rs);
            return a + b;
        });
        }
}
interface Dog{
    void run(String name);
}
interface add{
    int Result(int a , int b);
}
//匿名实现类来描述行为
class Lambdamv{
    public void dogmv(Dog d){
        d.run("dog");//传入接口数据
    }
    public void addable(add ad){
        ad.Result(2 , 3);
    }
}

由以上例子可以看出Lambda表达式可以被当作任意类型的参数来传入

Lambda表达式的类型也称为 目标类型,结果就是被当成对象,所以我们可以用Lambda表达式进行赋值

因为Lambda表达式被当作对象,所以可以直接对Runnable 接口的R对象直接进行赋值

需要注意的是 Lambda表达式的赋值对象必须是明确的函数接口,且Lambda表达式只能实现一个方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值