前提 函数式接口 :只有一个抽象方法的接口,@FunctionalInterface
用于 简化实现接口匿名内部类
/* 传统写法
Swimming swimming = new Swimming(){
@override
public void swim(参数列表){
System.out.print("游泳")
}
}
*/
//使用Lambda表达式
Swimming swimming = (参数列表)->{
System.out.print("游泳")
}
interface Swimming{
void swim(参数列表);
}
方法的引用:
当方法的形参列表和方法体的参数一致,则可以使用
//常规写法
BiPredicate<String, String> biPredicate = new BiPredicate<String, String>() {
@Override
public boolean test(String s1, String s2) {
return s1.equals(s2);
}
};
//初步Lambda写法
BiPredicate<String, String> biPredicateLambda =
(String s1, String s2) -> { return s1.equals(s2);};
//再次Lambda
BiPredicate<String, String> biPredicateLambdaAdv =
(s1, s2) -> s1.equals(s2);
//最终Lambda
BiPredicate<String, String> biPredicateLambdaest = String::equals;
//常规写法
Comparator<Integer> IntegerComparator = new Comparator<Integer>(){
@Override
public int compare(Integer s1, Integer s2) {
return Integer.compare(s1,s2);
}
};
//Lambda
Comparator<Integer> integerComparator = (s1,s2)->Integer.compare(s1,s2);
// 最终Lambda
Comparator<Integer> integerComparatorest =Integer::compare;
对于构造器的引用:
构造器名称 :: new;
使用的是声明的类中传入的泛型类型的构造器,如:泛型中是Integer类型,则引用的为形参类型是Integer的构造器
对于数组的引用:
数组类型[ ] :: new;
四大核心函数接口:常与Stream API配合使用