使用Lamabda表达式,是编程思想的转变!
个人理解:Lamabda表达式可以简化代码,让我们可以重点关注“做什么”,可以减少代码量,而且可以减少之前编程时由于java语法而不得不创建的代码。
比如:我要寄快递,我只需要把快递给快递员就好了。这个寄出去的快递它具体是怎么到达目的地的就不是我要关心的。
多线程代码举例:
public class Lamabda01 {
public static void main(String[] args) {
new Thread(()->{
System.out.println(Thread.currentThread().getName()+" 新线程创建了");
}).start();
}
}
成功运行
Lamabda表达式的标准格式:
? 由三部分组成:
? 一些参数
? 一个箭头;‘
? 一段代码
? (参数列表) ->{一些重写方法的代码;}
解释说明格式:
? “()”括号代表接口中抽象方法的参数列表,没有参数就空着,有参数就写进去,多个参数用逗号分隔开
? “->”箭头代表传递的意思,把参数传递给方法体{}
? “{}”大括号代表重写接口的抽象方法的方法体
给定一个厨子接口,内含唯一的抽象方法makeFood
,且无参数、无返回值。如下
public class CookTest {
public static void main(String[] args) {
//调用invokeCook方法,参数是Cook接口,传递Cook接口的匿名内部类对象
invokeCook(new Cook() {
@Override
public void makeFood() {
System.out.println("打印一句话");
}
});
//使用Lamabda表达式简化匿名内部类的书写
invokeCook(()->{
System.out.println("打印一句话");
});
}
//定义一个方法,参数传递Cook接口,方法内部调用Cook接口中的方法makeFood
public static void invokeCook(Cook cook){
cook.makeFood();
}
}
运行结果:
需求:
? 使用数组存储多个Person对象
? 对数组中的Person对象使用Arrays的sort方法通过年龄进行升序排序
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
public class PersonTest {
public static void main(String[] args) {
//创建数组,使用数组存储多个Person对象
Person[] people = {
new Person("牛大",48),
new Person("牛二",28),
new Person("牛三",18)
};
/* //对Person对象使用Arrays类中的sort方法,按照年龄进行升序排序
Arrays.sort(people, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge()- o2.getAge();//表示升序排序
}
});*/
//使用Lamabda表达式简化匿名内部类
Arrays.sort(people,(Person o1, Person o2)->{
return o1.getAge()-o2.getAge();
});
//遍历数组
for (Person person : people) {
System.out.println(person);
}
}
}
运行结果:
需求:
? 定义一个方法
? 传递两个int类型的参数
? 计算并打印两个参数的和
public class AdditionTest {
public static void main(String[] args) {
invokeAdditionI(5, 6, new AdditionI() {
@Override
public int Add(int a, int b) {
return a+b;
}
});
//使用Lamabda表达式简化匿名内部类
invokeAdditionI(11,22,(int a,int b)->{
return a+b;
});
}
public static void invokeAdditionI(int a,int b,AdditionI additionI){
int sum = additionI.Add(a,b);
System.out.println(sum);
}
}
运行结果:
将上面几个例题,优化Lamabda代码,使用Lamabda省略格式
public class Lamabda01 {
public static void main(String[] args) {
new Thread(()->{
System.out.println(Thread.currentThread().getName()+" 新线程创建了");
}).start();
//优化Lamabda代码,使用Lamabda省略格式
new Thread(()->System.out.println(Thread.currentThread().getName()+" 新线程创建了")).start();
}
}
public class CookTest {
public static void main(String[] args) {
//调用invokeCook方法,参数是Cook接口,传递Cook接口的匿名内部类对象
invokeCook(new Cook() {
@Override
public void makeFood() {
System.out.println("打印一句话");
}
});
//使用Lamabda表达式简化匿名内部类的书写
invokeCook(()->{
System.out.println("打印一句话");
});
//优化Lamabda代码,使用Lamabda省略格式
invokeCook(()->System.out.println("打印一句话"));
}
//定义一个方法,参数传递Cook接口,方法内部调用Cook接口中的方法makeFood
public static void invokeCook(Cook cook){
cook.makeFood();
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
public class PersonTest {
public static void main(String[] args) {
//创建数组,使用数组存储多个Person对象
Person[] people = {
new Person("牛大",48),
new Person("牛二",28),
new Person("牛三",18)
};
/* //对Person对象使用Arrays类中的sort方法,按照年龄进行升序排序
Arrays.sort(people, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge()- o2.getAge();//表示升序排序
}
});*/
//使用Lamabda表达式简化匿名内部类
Arrays.sort(people,(Person o1, Person o2)->{
return o1.getAge()-o2.getAge();
});
//优化Lamabda代码,使用Lamabda省略格式
Arrays.sort(people,(o1, o2)->o1.getAge()-o2.getAge());
//遍历数组
for (Person person : people) {
System.out.println(person);
}
}
}
原文:https://www.cnblogs.com/niuniu-/p/14729179.html