Lambda表达式(jdk1.8):函数编程思想(直达目的)。
举例:创建一个线程。
package com.lambda;
public class MyLambda {
public static void main(String[] args) {
//创建了匿名对象实现了线程的调用
new Thread(new Runnable(){
public void run(){
System.out.println(Thread.currentThread().getName()+"执行了!");
}
}).start();
//用lambda方法实现
new Thread(()->{
System.out.println(Thread.currentThread().getName()+"也执行了!");
}).start();
}
}
Lambda格式:
示例1:使用数组存储多个Person对象,对数组中的person对象使用Arrays的sort方法通过年龄进行升序排列
package com.lambda;
import java.util.Arrays;
import java.util.Comparator;
public class MyLambda {
public static void main(String[] args) {
Person[] arr={
new Person("大山",24),
new Person("二山",16),
new Person("三山",34)
};
/*Arrays.sort(arr, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
// TODO Auto-generated method stub
return o1.getAge()-o2.getAge();
}
});*/
Arrays.sort(arr,(Person o1, Person o2)->{
return o1.getAge()-o2.getAge();
});
//优化lambda
Arrays.sort(arr,( o1, o2)->o1.getAge()-o2.getAge());
for(Person p:arr){
System.out.println(p);
}
}
}
示例2:定义一个Calculator接口,定义方法calc(int a,int b),使用lambda实现两个参数的相加
package com.lambda;
public class MyLambda {
public static void main(String[] args) {
/*invokecalc(120,130,new Calculator() {
@Override
public int calc(int a, int b) {
// TODO Auto-generated method stub
return a+b;
}
});*/
invokecalc(120, 130, (int a,int b)->{
return a+b;
});
//优化lambda
invokecalc(120, 130, (a,b)->a+b);
}
public static void invokecalc(int a,int b,Calculator calculator){
int result=calculator.calc(a, b);
System.out.println("结果是"+result);
}
}
package com.lambda;
public interface Calculator {
public abstract int calc(int a,int b);
}
Lambda还可以继续简写:
凡是上下文推导出来的内容,都可以省略书写
可以省略的内容
1:(参数列表)括号中参数列表的数据类型可以省略不写
2:(参数列表)括号中的参数列表如果只有一个,那么类型和()都可以省略
3:{一些代码}:如果{}中的代码只有一行,无论是否有返回值,都可以省略({},return,分号)
注意:省略{},return,分号必须一起省略。