Lambda学习笔记

1.函数式编程思想:有输入得到输出的一套计算思想 即:拿数据做操作,忽略对象的复杂语法,强调做什么,而不是以什么形式去做
2.面向对象思想则是:必须通过对象的形式做操作
3.Lambda就是函数思想
  eg:  new Thread(()->{
                 System.out.println("Lambda方式:多线程方式起动了。。。。");
             }).start();
       ():形式参数:表示方法的传参为空
       ->:箭头:指向后面要做的事
       {}:代码块:方法体,要做的事, 体现函数编程思想,着重体现要做什么事
       即:(形式参数)->{代码块}
       Lanbda使用前提:有一个接口  and  接口中有且仅有一个抽象方法
4.Lambda省略模式:
  a.省略类型: useAddAble((int x,int y)->{
                     return x+y;
                 });
          -->useAddAble((x,y)->{
                     return x+y;
                 });
          注意 x , y, int 要同时省略
  b. 如果有且仅有一个参数,小括号也可能省略
     eg: useEatAbleB((String b) -> {
                    System.out.println("Lambda说今天吃" + b);
                });
         --->useEatAbleB((b) -> {
                      System.out.println("Lambda说今天吃" + b);
             });
  c.如果代码块有且仅有一条语句,{}和; 也可省略,如果有return ,return也要一起省略
    eg:  useEatAbleB(s -> System.out.println("Lambda说吃:" + s));
         useAddAble((x, y) -> x + y);
5.Lambda 和内部类的区别:
  1.Lambda:所需要对象只能是接品,而内部类可以是对象,接口,和抽象类
  2.Lambda 使用的接口里,只能用一个抽象方法,有多个就报错,但内部类可以使用接口中有多个抽象方法
  3.Lambda 编译时只产生一个.class文件,内部类编译时除本身还会多产生一个.class文件

学习code:

package ten;

import org.w3c.dom.ls.LSOutput;

/**
 * @author KuKaFei.Hai
 * @date 2020/4/17 : 14:52
 * @Email : 383232084@qq.com
 */
public class EatTestDemo {
    public static void main(String[] args) {
        //多态的方式生成对象
        EatAble eatA = new EatAbleImp();
        useEatAble(eatA);  // A
        System.out.println("----匿名内部类实现-------");
        useEatAble(new EatAble() {
            @Override
            public void eat() {
                System.out.println("一天一苹果,医生远离我2");
            }
        });
        System.out.println("--------无参测试Lambda---------");
        useEatAble(() -> {
            System.out.println("Lambda:一天一苹果,医生远离我");
        });
        System.out.println("//传参且无返回值的//");
        System.out.println("----传参的 匿名内部类---------");
        EatAbleB eatAbleB = new EatAbleBImp();
        useEatAbleB(new EatAbleB() {
            @Override
            public void eat(String s) {
                System.out.println("今天吃:" + s);
            }
        });
        System.out.println("----传参且无返回值的 Lambda测试-----");
        useEatAbleB((String b) -> {
            System.out.println("Lambda说今天吃" + b);
        });
        System.out.println("传两参数,且带返回值的/");
        // 1.通过实现addAble接口实现对象,略
        // 匿名内部类形式
        int temp = useAddAble(new addAble() {
            @Override
            public int add(int a, int b) {
                return a + b;
            }
        });
        System.out.println("匿名内部类返回:" + temp);
        System.out.println("---------有两参数,带返回值 Lambda测试----------------");
        System.out.println("Lambda返回:" + useAddAble((int x, int y) -> {
            return x + y;
        }));
        useAddAble((x, y) -> {
            return x + y;
        });
        useEatAbleB(s -> {
            System.out.println("Lambda说吃:" + s);
        });
        useEatAbleB(s -> System.out.println("Lambda说吃:" + s));
        useAddAble((x, y) -> x + y);
    }

    private static int useAddAble(addAble a) {
        return a.add(10, 20);
    }

    /**
     * 方法中要传一个参数
     *
     * @param b 传一个实现对象
     */
    private static void useEatAbleB(EatAbleB b) {
        b.eat("苹果");
    }

    /**
     * @param e 这里,EatAble 虽然是接口,但是当接口做为参数时,
     *          实际是要传要传一个EatAble的实现类  eg: A处
     */
    private static void useEatAble(EatAble e) {
        e.eat();
    }


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值