packagecom.alibaba.lambda_practice;/*
通过创建线程,对比lambda表达式的简便之处。
*/publicclassDemo01{publicstaticvoidmain(String[] args){//方式一:老老实实创建Runnable接口子类//1.新建Runable接口的子类RSON,创建子类对象RSON rson =newRSON();//2.创建Thread类对象,构造方法传入子类对象rsonThread t1 =newThread(rson);//3.开启线程
t1.start();//方式二:用匿名内部类来创建Runnable接口实现类对象,省去单独建一个类了Thread t2 =newThread(newRunnable(){@Overridepublicvoidrun(){System.out.println("方式二:简单打印一下");for(int i =0; i <10; i++){System.out.print(i);}System.out.println("\n==================");}});
t2.start();//方式三: Runnable符合函数式接口,用lambda表达式简化Thread t3 =newThread(()->{System.out.println("方式三:简单打印一下");for(int i =0; i <10; i++){System.out.print(i);}System.out.println("\n==================");});
t3.start();}}class RSON implementsRunnable{@Overridepublicvoidrun(){System.out.println("方式一:简单打印一下");for(int i =0; i <10; i++){System.out.print(i);}System.out.println("\n==================");}}
packagecom.alibaba.lambda_practice;/*
异常提示:Variable used in lambda expression should be final or effectively final
*/publicclassDemo02{publicstaticvoidmain(String[] args){int n =10;newThread(newRunnable(){@Overridepublicvoidrun(){
n =20;System.out.println(n);}}).start();}}
packagecom.note.functions_interface_test.supplier_test;importjava.util.Arrays;importjava.util.function.Supplier;publicclassTest{publicstaticvoidmain(String[] args){//Supplier练习题求数组最大值int[] nums ={20,3,4,5,6};int m =getMethod(nums,()->{int max = nums[0];for(int num : nums){if(max < num){
max = num;}}return max;});System.out.println(m);//Supplier练习题求数组元素之和int s =getMethod(nums,()->{int sum =0;for(int i =0; i < nums.length ;++i){
sum += nums[i];}return sum;});System.out.println(s);//这样写的好处,将方法内具体怎么操作交给调用者决定}publicstaticintgetMethod(int[] nums,Supplier<Integer> supplier){return supplier.get();}}