本文共 5665 字,大约阅读时间需要 18 分钟。
7.6 函数式编程思想概述
7.7 冗余的Runnable代码
package com.itheima.demo03.Lambda;/* 使用实现Runnable接口的方式实现多线程程序 */public class Demo01Runnable { public static void main(String[] args) { //创建Runnable接口的实现类对象 RunnableImpl run = new RunnableImpl(); //创建Thread类对象,构造方法中传递Runnable接口的实现类 Thread t = new Thread(run); //调用start方法开启新线程,执行run方法 t.start(); //简化代码,使用匿名内部类,实现多线程程序 Runnable r = new Runnable(){ @Override public void run() { System.out.println(Thread.currentThread().getName()+" 新线程创建了"); } }; new Thread(r).start(); }}
7.8 编程思想转换
做什么,而不是怎么做
生活举例:
7.9 体验Lambda的更优写法
package com.xww.demo03;/* 使用实现Runnable接口的方式实现多线程程序 */public class demoRunnable { public static void main(String[] args) { //创建Runnable接口的实现类对象 RunnableImpl run = new RunnableImpl(); //创建Thread类对象,构造方法中传递Runnable接口的实现类 Thread t = new Thread(run); //调用start方法开启新线程,执行run方法 t.start();//Thread-0 新线程创建了 //Lambda优化 new Thread( ()->{ System.out.println(Thread.currentThread().getName()+" 新线程创建了"); }).start();//Thread-1 新线程创建了 }}
7.10 回顾匿名内部类
public abstract void run();
() ‐> System.out.println("多线程任务执行!")
7.11 Lambda标准格式
(参数列表) -> {一些重写方法的代码};
7.12 Lambda表达式_无参无返回值_练习
package com.xww.demo04;/* 定一个厨子Cook接口,内含唯一的抽象方法makeFood */public interface Cook { //定义无参数无返回值的方法makeFood public abstract void makeFood();}
package com.xww.demo04;public class demoCook { public static void main(String[] args) { //调用invokeCook方法,参数是Cook接口,传递Cook接口的匿名内部类对象 invokeCook(new Cook() { @Override public void makeFood() { System.out.println("吃饭了"); } }); //使用Lambda表达式,简化匿名内部类的书写 invokeCook(()->{ System.out.println("吃饭了"); }); } //定义一个方法,参数传递Cook接口,方法内部调用Cook接口中的方法makeFood public static void invokeCook(Cook cook){ cook.makeFood(); }}
7.13 Lambda表达式_有参有返回值_练习
需求:
示例:
package com.xww.demo05;import java.util.Arrays;public class demoPerson { public static void main(String[] args) { //使用数组存储多个Person对象 Person[] arr = { new Person("a",3), new Person("b",1), new Person("c",1) }; //对数组中的Person对象使用Arrays的sort方法通过年龄进行升序(前边-后边)排序 /*Arrays.sort(arr, new Comparator() { @Override public int compare(Person o1, Person o2) { return o1.getAge()-o2.getAge(); } });*/ //使用Lambda表达式,简化匿名内部类 Arrays.sort(arr,(Person o1, Person o2)->{ return o1.getAge()-o2.getAge(); }); //遍历数组 for (Person p : arr) { System.out.println(p); } }}//Person{name='b', age=1}//Person{name='c', age=1}//Person{name='a', age=3}
7.14 Lambda表达式_有参有返回值_自定义接口_练习
package com.xww.demo06;public class demoCalculator { public static void main(String[] args) { //调用invokeCalc方法,方法的参数是一个接口,可以使用匿名内部类// invokeCalc(10, 30, new Calculator() { // @Override// public int calc(int a, int b) { // return a+b;//40// }// }); //使用Lambda表达式简化匿名内部类的书写 invokeCalc(10,30,(int a,int b)->{ return a + b;//40 }); } /* 定义一个方法 参数传递两个int类型的整数 参数传递Calculator接口 方法内部调用Calculator中的方法calc计算两个整数的和 */ public static void invokeCalc(int a,int b,Calculator c){ int sum = c.calc(a,b); System.out.println(sum); }}
7.15 Lambda 省略格式与使用前提
//使用Lambda表达式,简化匿名内部类的书写 invokeCook(()->{ System.out.println("吃饭了"); }); //优化省略Lambda invokeCook(()-> System.out.println("吃饭了"));
//使用Lambda表达式简化匿名内部类的书写 invokeCalc(120,130,(int a,int b)->{ return a + b; }); //优化省略Lambda invokeCalc(120,130,(a,b)-> a + b);
转载地址:http://xgrwz.baihongyu.com/