lambda表达式的使用
1.四大函数式接口
-
举例
(o1,o2)-> Integer.compare(o1,o2);
-
格式:
-> : lambda表达式 或箭头操作符
->左边: 接口中的抽象方法的形参列表
->右边:lambda体(就是重写的抽象方法的方法体)
-
lambda的使用(总结)
->左边:lambda形参列表的参数类型可以省略(类型推断),如果lambda的参数列表只有一个参数,则小括号也可以省略
->右边:lambda体应该使用一对{}包裹;如果lambda体只有一条执行语句(可能是return语句),则{}和return关键字都可以省略
lambda表达式的实质:作为函数式接口的实例
如果一个接口中,只声明了一个抽象方法,则此接口称为函数式接口
- 四大函数式接口
2.方法引用和构造器引用
方法引用
-
总结: 针对
- 类::静态方法 和 对象::实例方法 ===》实现的接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型一致
* 情况一: 对象::实例方法
*/
// consumer中的 void accept(T t)
// PrintStream中的 void println(T t)
@Test
public void test01(){
Consumer<String> consumer=s->System.out.println(s);
consumer.accept("方法引用调用的打印");
System.out.println("================");
Consumer<String> consumer01=System.out::println;
consumer.accept("方法引用调用的打印");
}
// supplier 中的 T get()
// Employee中的 String getName()
@Test
public void test02(){
Employee employee = new Employee("tom",23);
Supplier<String> supplier=()-> employee.getName();
System.out.println(supplier.get());
System.out.println("================");
Supplier<String> supplier1= employee::getName;
System.out.println(supplier1.get());
}
/**
* 情况二: 类 ::静态方法
* Comparator int compare(T o1, T o2);方法
* Integer 的 int compare(int x, int y)方法
*/
@Test
public void test03(){
Comparator<Integer> comparator=(t1,t2)->Integer.compare(t1,t2);
System.out.println(comparator.compare(11, 12));
System.out.println("=========");
Comparator<Integer> comparator01=Integer::compare;
System.out.println(comparator01.compare(11, 12));
}
、、、
2. 针对类::实例方法
* 情况三: 类::实例方法
* Comparator中的 int compare(T t1,T t2)
* String 中的 int t1.compareTo(t2)
*/
@Test
public void test04(){
Comparator<Integer> comparator=(t1,t2)->Integer.compare(t1,t2);
System.out.println(comparator.compare(11, 12));
System.out.println("=========");
Comparator<Integer> comparator01=Integer::compareTo;
System.out.println(comparator01.compare(11, 12));
}
构造引用
构造引用
/**
* 构造器引用
* 函数接口中抽象的方法的参数和对象的构造器的方法的参数一致,返回的是该对象
*/
@Test
public void test05(){
BiFunction<String,Integer,Employee> fun01=(t1,t2)->{return new Employee(t1,t2);};
System.out.println(fun01.apply("hello", 23));
System.out.println("===============");
BiFunction<String,Integer,Employee> fun02=Employee::new;
System.out.println(fun01.apply("hello", 23));
}