Lambda表达式体验
格式:(形式参数)->{代码块}
package test08; public class MyRunnable implements Runnable { @Override public void run(){ System.out.println("多线程启动了"); } }
package test08; /* 需求:启动一个线程,在控制台输出多线程启动了 */ public class LambdaDemo { public static void main(String[] args) { // //实现类的方式实现需求 // MyRunnable my = new MyRunnable(); // Thread t = new Thread(my); // t.start(); // //匿名内部类的方式改进 // new Thread(new Runnable() { // @Override // public void run() { // System.out.println("多线程启动了"); // } // }).start(); //Lambda表达时方式改进 new Thread(() -> { System.out.println("多线程启动了"); }).start(); } }
Lambda使用前提,有一个接口,接口中有且仅有一个方法
lambda表达式,抽象方法无参无返回值
//package test08; // //public class EatableImp implements Eatable{ // @Override // public void eat(){ // System.out.println("one day"); // } // //}
package test08; public interface Eatable { void eat(); }
package test08; public class EatableDemo { public static void main(String[] args) { // //在主方法中调用useEatable方法 // EatableImp e = new EatableImp(); // useEatable(e); //匿名内部类 useEatable(new Eatable() { @Override public void eat() { System.out.println("匿名内部类"); } }); //Lambda表达式(前提:定义一个接口,有且仅有一个方法;定义一个方法使用接口) useEatable(() -> { System.out.println("lambda表达式"); }); } //定义一个方法使用接口 public static void useEatable(Eatable e) { e.eat(); } }
lambda表达式,抽象方法带参无返回值
package test08; public interface Flyable { //定义一个接口,定义一抽象方法 void fly(String s); }
package test08; import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer; public class FlyableDemo { public static void main(String[] args) { //在主方法中调用useFlyable方法 //匿名内部类 useFlyable(new Flyable() { @Override public void fly(String s) { System.out.println(s); System.out.println("匿名内部类的方法"); } }); // //Lambda表达式 // useFlyable((String s) -> { // System.out.println(s); // System.out.println("lambda"); // }); // //可以省略括号 // useFlyable(s -> { // System.out.println(s); // System.out.println("lambda"); // }); //如果代码块只有一条,可以省略大括号和分号 useFlyable(s -> System.out.println("lambda") ); } public static void useFlyable(Flyable f) { f.fly("Flyable接口"); } }
lambda表达式,抽象方法带参带返回值
package test08; public interface Addable { int add(int x,int y); }
package test08; public class AddableDemo { public static void main(String[] args) { // useAddable((int x,int y)->{ // return x+y; return x-y; // }); //参数的类型可以省略,需要一起省略 useAddable(( x, y)->{ return x+y; }); } private static void useAddable(Addable a){ int sum = a.add(10, 20); System.out.println(sum); } }