Lamda表达式
函数式编程的产生(匿名内部类)
interface Mes{ public void speak(); } public class Lam { public static void main(String[] args) { fun(new Mes(){//匿名内部类 public void speak(){//覆写方法 System.out.println("hello!"); } }); } public static void fun(Mes m){//传递接口类型参数 m.speak(); } }
【2】
匿名内部类
Book接口
interface Book{ public static final double price=21.8; public static final String title="诗词"; public void show(double price,String title); } public class Lam { public static void main(String[] args) { fun(new Book(){//匿名内部类 public void show(double price,String title){//覆写方法 System.out.println(price+" "+title); } }); } public static void fun(Book b){//传递接口类型参数 b.show(34.6,"歌曲"); } }
研究Lamda必须先熟悉匿名内部类
嵌套太多的原因
JDK1.8引入
【3】
格式
fun((参数类型 参数)->执行语句);
interface Book{ public static final double price=21.8; public static final String title="诗词"; public void show(double price,String title); } public class Lam { public static void main(String[] args) { // fun(new Book(){//匿名内部类 // public void show(double price,String title){//覆写方法 // System.out.println(price+" "+title); // } // }); fun((double price,String title)->System.out.println(price+" "+title)); } public static void fun(Book b){//传递接口类型参数 b.show(34.6,"歌曲"); } }
【4】
Lamda三种形式
(参数)->单行语句
(参数)->{语句;}
(参数)->表示式
interface Book{ public static final double price=21.8; public static final String title="诗词"; public void show(double price,String title); } public class Lam { public static void main(String[] args) { //Lamda (参数)->{语句;} fun((double price,String title)->{ System.out.println("书的价格:"+price); System.out.println("书的名字:"+title); }); } public static void fun(Book b){//传递接口类型参数 b.show(34.6,"歌曲"); } }
【5】
interface Book{ public static final double price=21.8; public static final String title="诗词"; public String show(double price,String title); } public class Lam { public static void main(String[] args) { //Lamda (参数)->表示式 fun((double price,String title)-> "书的价格:"+price+"书的名字:"+title ); } public static void fun(Book b){//传递接口类型参数 System.out.println(b.show(34.6,"歌曲")); } }
【7】
add(x+y)练习Lamde
interface Inte{ public int add(int x,int y); } public class Lam { public static void main(String[] args) { //Lamda fun( (a,b)->a+b ); } public static void fun(Inte i){ System.out.println(i.add(34,4)); } }
总结:
Lamde最终解决的是 定义过多匿名内部类的问题