lambda表达式初体验

lambda的前提:-----》有一个接口,并且有且只有一个抽象方法  

1、函数式编程思想

考虑要做什么,而不是怎么做

2、初体验

实现:启动一个线程,控制台输出,线程启动了。。。

·~:定义一个类myrunnable实现runnable接口,重写run方法;

创建myrunnable类对象

创建thread类对象,把myrunnable的对象作为构造参数传递

启动线程

MyRunnable my=new MyRunnable();
Thread thread = new Thread(my);
thread.start();

·~:匿名内部类的方法

new Thread(new Runnable() {
@Override
public void run() {
System.out.println("匿名内部类的方法 ");
}
}).start();

·~:lambda的方法

new Thread(()->{
System.out.println(" hhhhh " );
}).start();

3、lambda的标准格式
从匿名内部类中,看出重写run方法。
·~:方法形式为空,说明调用方法不需要传递参数
·~:方法返回值类型为void,说明没有方法返回。
·~:方法体的内容,是具体要做的事情。
lambda表达式:()为空,可以当作方法形式参数为空 -》:指向要做的事情 {}包含代码块,可以当作方法体中的内容。
格式:(形式参数)->{代码块}

useAddable((int x,int y)->{
return x+y;
});
参数类型可以省略,但是多个参数的情况下,不能只省略一个。如果参数有且仅有一个,那么小括号可以省。如果代码块的语句只有一句,可以省略大括号和分号。
如果有return,那么return也要省略。。
useAddable((x, y)->{
return x+y;
});useAddable(x->{
   return x;
});
useAddable(x->x);
注意:::::
1、使用lambda必须有接口,并且要求接口中有且仅有一个抽象方法
2、必须有上下文环境,才能推到出lambda对应的接口
  根据局部变量的赋值得知lambda对应的接口:Runnbler=()-》system.out.printly('lambda')
  根据调用方法的参数得知lambda对应的接口:new thred(()-》system.out.printly('lambda').start();
匿名内部类和lambda的区别

所需类型不同:
·~:匿名内部类,可以是接口,也可以是抽象类,还可以是具体类
·~:只能是接口
使用限制不同
·~:如果接口中有且仅有一个抽象方法,可以使用lambda,也可以匿名内部类
·~:接口多于1个,就只能匿名内部类,不能lambda表达式。。


原文地址:https://www.cnblogs.com/xiangyucc/p/13644609.html