Java----Lambda表达式知识梳理
一.概念明确
面向对象的思想:
做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情.
函数式编程思想:
只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程
二.lambda表达式的语法及案例
先看个例子
()->System.out.println("1234");
前面的一对小括号即方法的参数(无),代表不需要任何条件;
中间的一个箭头代表将前面的参数传递给后面的代码;
后面的输出语句即业务逻辑代码。
标准语法
Lambda表达式的标准格式:
由三部分组成:
a.一些参数
b.一个箭头
c.一段代码
格式:
(参数列表) -> {一些重写方法的代码};
解释说明格式:
():接口中抽象方法的参数列表,没有参数,就空着;有参数就写出参数,多个参数使用逗号分隔
->:传递的意思,把参数传递给方法体{}
{}:重写接口的抽象方法的方法体
1.无参数无返回值型:
@Test
public void Test() {
InvokeCook(()->{
System.out.println("123");
});
}
void InvokeCook(Cook cook){
cook.makeFood();
}
public interface Cook {
void makeFood();
}
打印出123
注意使用Lambda表达式实现接口时,接口只可以有一个方法。
下面再看一个练习:
2.有参数有返回值型:
import org.junit.Test;
import java.io.*;
import java.util.Arrays;
import java.util.Comparator;
public class AVL {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
}
@Test
public void Test() {
Person persons[] = new Person[3];
persons[0]=new Person(10,"jack");
persons[1]=new Person(9,"tom");
persons[2]=new Person(5,"rose");
Arrays.sort(persons,new Comparator<Person>(){
@Override
public int compare(Person o1,Person o2) {
return o1.age-o2.age;
}
});
for(int i=0;i<3;i++){
System.out.println(persons[i]);
}
persons[0]=new Person(27,"jack");
persons[1]=new Person(4,"tom");
persons[2]=new Person(56,"rose");
Arrays.sort(persons,(Person person1,Person person2)->{
return person1.age-person2.age;
});
System.out.println("----------------------------");
for(int i=0;i<3;i++){
System.out.println(persons[i]);
}
}
}
运行结果:
3.Lambda省略形式
Lambda表达式:是可推导,可以省略
凡是根据上下文推导出来的内容,都可以省略书写
可以省略的内容:
1.(参数列表):括号中参数列表的数据类型,可以省略不写
2.(参数列表):括号中的参数如果只有一个,那么类型和()都可以省略
3.{一些代码}:如果{}中的代码只有一行,无论是否有返回值,都可以省略({},return,分号)
注意:要省略{},return,分号必须一起省略
其实这个省略我个人认为也没多么简单反而记了更多东西还不如就了解一下算了