函数式编程
这是一种思想特点
面向对象:先找对象,让对象做事情,强调做什么,而不是谁去做
()->{ }
注意点:Lambda表达式可以用来简化匿名内部类的书写
Lambda表达式只能简化函数时接口的匿名内部类的写法
函数式接口:
有且仅有一个抽象方法的接口叫做函数式接口,接口上方可以加@Functionalinterface注解。
好处:
Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁、更灵活的代码,作为一种更紧凑的代码风格,使Java语言表达能力得到了提升。
Lambda省略规则
1.参数类型可以省略不写。
2.如果只有一个参数,参数类型可以省略,同时()也可以省略。
3.如果Lambda表达式的方法体只有一行,大括号,分号,return可以省略不写,需要同时省略。
package test;
import java.util.Arrays;
public class Text1 {
public static void main(String[] args) {
Friend f1 = new Friend("zhang",20,1.74);
Friend f2 = new Friend("song",21,1.75);
Friend f3 = new Friend("liu",21,1.75);
Friend f4 = new Friend("zhao",22,1.76);
Friend[] arr = {f1,f2,f3,f4};
Arrays.sort(arr, (o1, o2)->{
double temp = o1.getAge() - o2.getAge();
temp = temp == 0 ? o1.getHeight()-o2.getHeight():temp;
temp = temp == 0 ? o1.getName().compareTo(o2.getName()):temp;
if(temp >0){
return 1;
}else if (temp<0){
return -1;
}else {
return 0;
}
});
System.out.println(Arrays.toString(arr));
}
}
package test;
public class Friend {
private String name;
private int age;
private double height;
public Friend() {
}
public Friend(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
@Override
public String toString() {
return "Friend{" +
"name='" + name + '\'' +
", age=" + age +
", height=" + height +
'}';
}
}