知识点:
1.分析函数式编程的产生原因;
2.掌握函数式编程的语法;
具体内容:
Lamda属于函数式编程的概念,那为什么需要函数式的编程呢?这需要通过匿名内部类来分析。
范例:传统的匿名内部类
package 比较器;
interface IMessage {
public void print();
}
package 比较器;
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开发结构性完整的要求,所以不得不在这个核心的语句上嵌套更多的内容内容。
fun(new IMessage(){
public void print(){
System.out.println("hello world");
}
});
以上代码中层层嵌套的代码只有其中的System.out.println("hello world")起作用。
有人认为以上的做法实在是过于的严谨了,所以在JDK1.8时代引入勒函数式的编程,以此来简化代码。
范例:使用Lamda表达式。
package 比较器;
public class TestDemo {
public static void main(String[] args) {
fun(()->System.out.println("hello world!"));
}
public static void fun(IMessage msg){
msg.print();
}
}
整个操作里面内部类只是进行了一行语句的输出,所以此时使用Lamda表达式可以非常轻松的实现输出要求。这其实就是为了解决匿名内部类过多繁杂的语法而出现的。
对于Lamda语法有三种形式:
1.(参数)->单行语句。
2.(参数)->{单行语句.....单行语句}。多个单行语句,前面{}是一个代码块。
3.(表达式)->表达式。
范例:观察有参的单行语句
package 比较器;
interface IMessage {
public void print(String str);
}
package 比较器;
public class TestDemo {
public static void main(String[] args) {
fun((s)->System.out.println(s));
}
public static void fun(IMessage msg){
msg.print("hello world");
}
}
范例:编写多行语句
package 比较器;
interface IMessage {
public void print(String str);
}
package 比较器;
public class TestDemo {
public static void main(String[] args) {
fun((s)->{
s=s.toUpperCase(); //转大写
System.out.println(s)
});
}
public static void fun(IMessage msg){
msg.print("hello world");
}
}
范例:编写一个表达式
package 比较器;
interface IMessage {
public void add(int x, int y);
}
package 比较器;
public class TestDemo {
public static void main(String[] args) {
//首先要定义此处表达式里面需要接收的变量,单行语句直接进行输出
fun((s1,s2)->s1+s2);
}
public static void fun(IMessage msg){
System.out.println(msg.add(10, 20));
}
}
fun(S1,S2)->{return s1+s2}
总结:利用Lamda表达式最终解决的问题:避免了匿名内部类定义过多无用的操作。