lambda表达式是Java函数式编程,jdk1.8之后提供的新特性
1.1函数式编程
函数式编程是一种思想特点,忽略面向对象的复杂语法,强调做什么,而不是谁去做
简单来说就是我们更加关注方法体中的逻辑,而不是创建出来的对象
Lambda表达式就是函数式思想的体现
1.2函数式接口
函数式接口(Function interface也叫作功能性接口),一个接口里面只包含一个函数的接口,jdk8提供@FunctionalInterface,作为声明函数式接口的注解,但这是非必须的,只要定义的接口符合函数式接口标准(一个接口中只有一个方法),虚拟机会自动判断
如Comparator接口就是一个函数式接口:
lambda表达式无法单独存在,必须要求函数接口来实现,用lambda来实现这个借口
1.3应用场景
1.定义匿名函数
public interface Swimming {
void swim();
}
public class Main {
public static void main(String[] args) {
//匿名内部类
new Swimming(){
@Override
public void swim() {
System.out.println("游泳");
}
};
}
}
2.排序sort
lambda作为排序函数参数,指定排序规则
import java.util.Arrays;
import java.util.Comparator;
public class Test5 {
public static void main(String[] args) {
Integer[] arr={1,2,3,4,5};
//降序排序
Arrays.sort(arr,new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
}
}
3.过滤
在stream流中使用filter过滤流中的数据
import java.util.Arrays;
import java.util.function.Predicate;
import java.util.stream.Stream;
public class Test5 {
public static void main(String[] args) {
String[] arr={"小红","中红","大红"};
arr=Stream.of(arr).filter(new Predicate<String>() {
@Override
public boolean test(String s) {
return s.startsWith("小");
}
}).toArray(String[]::new);
System.out.println(Arrays.toString(arr));//小红
}
}
4.映射
在stream流中使用map完成数据的映射
import java.util.function.Function;
import java.util.stream.Stream;
public class Test5 {
public static void main(String[] args) {
String[] arr={"1","2","3"};
//将string类型转换为int
Stream.of(arr).map(new Function<String, Integer>() {
@Override
public Integer apply(String s) {
return Integer.parseInt(s);
}
});
}
}
5.GUI编程
如:定义事件监听
1.4Lambda表达式
①概述
Lambda表达式是JDK8开始的一种新语法特点
Lambda表达式只能简化函数式接口(只有一个抽象方法的接口)的匿名内部类的写法
②格式
( 参数类型 参数1,参数类型 参数2,....)->{方法体 }
( )对应方法的形参
->固定格式
{}对应着方法的方法体
③Lambda的省略规则
Ⅰ.参数类型可以省略不写
Ⅱ.如果只有一个参数,()也可以省略
Ⅲ.如果方法体只有一行,大括号,分号,return可以省略不写
如下:利用lambda表达式简写函数式接口
import java.util.Arrays;
import java.util.Comparator;
public class Test5 {
public static void main(String[] args) {
//降序
Integer[] arr={1,2,3,4,5};
// Arrays.sort(arr, new Comparator<Integer>() {
// @Override
// public int compare(Integer o1, Integer o2) {
// return o2-o1;
// }
// });
//lambda表达式简化
Arrays.sort(arr,(o2,o1)->o2-o1);
}
}