Lamda:属于函数式编程的概念;
interface IMessage { public void print() ; } public class TestDemo { public static void main(String [] args) { fun(new IMessage() { public void print() { System.out.println("Hello,World!") ; } }) ; } public static void fun(IMessage msg) { msg.print() ; } }
上例代码为 匿名内部类 的运用;然而实际上在整个代码中,最终需要的只有一个输出操作,但由于Java的开发结构要求,不得不在核心的输出语句上嵌套更多内容;为了简化类似上例代码,JDK1.8引用了 函数式的编程 可以使用Lamda表达式。
interface IMessage { public void print() ; } public class TestDemo { public static void main(String [] args) { fun( ()->System.out.println("Hello,World!") ) ; // Lamda表达式 // } public static void fun(IMessage msg) { msg.print() ; } }
在整个代码的操作中,匿名内部类只进行一行语句的输出,所以此时使用了Lamda表达式实现需求。
对于Lamda语法主要有三种形式:
1 — (参数) -> 单行语句
2 — (参数) -> {多行语句}
3 — (参数) -> 表达式
观察代码:
interface IMessage { public void print( String str ) ; } public class TestDemo { public static void main(String [] args) { // 首先要定义此处表达式需要接收的变量 fun( (s)->System.out.println(s) ) ; // Lamda 有参语法 // } public static void fun(IMessage msg) { msg.print("Hello World!") ; //设置参数的内容 } }
interface IMessage { public void print( String str ) ; } public class TestDemo { public static void main(String [] args) { // 定义Lamda有参多行语法 fun( (s)->{ s = s.toUpperCase() ; System.out.println(s) ; } ) ; } public static void fun(IMessage msg) { msg.print("Hello World!") ; //设置参数的内容 } }
interface IMessage { public void add( int x , int y ) ; } public class TestDemo { public static void main(String [] args) { // 定义Lamda有参表达式语法 fun( (s1,s2) -> { return s1+s2 ;} ) ; } public static void fun(IMessage msg) { System.out.println(msg.add(10,20)) ; } }
————————————
总结:
利用Lamda表达式最终解决的问题是:避免了匿名内部类内定义过多无用的操作。
~~~~~