一、函数式编程思想的概述
在数学中,函数是有输入量和输出量的一套计算方案,就是拿“数据做操作”
在面向对象的编程中强调,必须通过对象的形式来做事情
函数式思想则尽量的忽略对象的复杂语法,“强调做什么,而不是以什么形式去做”
lambda表达式就是函数式思想的体现。
二、体验lambda表达式
需求:启动一个线程,在控制台输出一句话:多线程启动了
方案1:
- 定义一个类MyRunnable接口,重写run()方法
- 创建MyRunnable类的对象
- 创建Thread类对象,把MyRunnable的对象作为构造参数传递
- 启动线程
public class LambdaDemo {public static void main(String[] args) {MyRunnable myRunnable = new MyRunnable();Thread t = new Thread(myRunnable);t.start();}
}
class MyRunnable implements Runnable{@Overridepublic void run() {System.out.println("多线程启动了");}}
方案2:匿名内部类的方式改进
public class LambdaDemo {public static void main(String[] args) {// 匿名内部类的方式改进new Thread(new Runnable() {@Overridepublic void run() {System.out.println("多线程启动了");}}).start();}
}
方案3:lambda表达式的方式进行改进
public class LambdaDemo {public static void main(String[] args) {// lambda表达式的方式进行改进new Thread( () ->{System.out.println("多线程启动了");}).start();}
}
三、lambda表达式的标准格式
lambda表达式的三要素:形式参数、箭头、代码块
lambda表达式的哥格式
- 格式:(形式参数)->{代码块}
- 形式参数:如果有多个参数,参数之间用逗号分开;如果没有参数,留空白即可
- ->:由英文中划线和大于符号组成,固定写法。代表执行动作
- 代码块:是我们具体要做的事情,也就是我们写的方法体和内容
四、lambda表达式的练习
lambda表达式的使用前提
- 有一个接口
- 接口当中有且仅有一个抽象方法
练习1:无参无返回
/*** 无参无返回值*/
public interface NoReturnNoParam {void method();
}
public class LambdaDemo {public static void main(String[] args) {//无参无返回NoReturnNoParam noReturnNoParam = () -> {System.out.println("NoReturnNoParam");};noReturnNoParam.method();}
}
2.一个参数无返回
/*** 一个参数无返回*/
public interface NoReturnOneParam {void method(int a);
}
//一个参数无返回
NoReturnOneParam noReturnOneParam = (int a) -> {System.out.println("NoReturnOneParam param:" + a);
};
noReturnOneParam.method(6);
3.以下每一个都是一个接口
/*** 多参数无返回*/
public interface NoReturnMultiParam {void method(int a, int b);
}/*** 多个参数有返回值*/
public interface ReturnMultiParam {int method(int a, int b);
}/*** 一个参数有返回值*/
public interface ReturnOneParam {int method(int a);
}
以下是案例
public class LambdaDemo {public static void main(String[] args) {//无参有返回值ReturnNoParam returnNoParam = () -> {System.out.print("ReturnNoParam");return 1;};int res = returnNoParam.method();System.out.println("return:" + res);//一个参数有返回值ReturnOneParam returnOneParam = (int a) -> {System.out.println("ReturnOneParam param:" + a);return 1;};int res2 = returnOneParam.method(6);System.out.println("return:" + res2);//多个参数有返回值ReturnMultiParam returnMultiParam = (int a, int b) -> {System.out.println("ReturnMultiParam param:" + "{" + a + "," + b +"}");return 1;};int res3 = returnMultiParam.method(6, 8);System.out.println("return:" + res3);}
}