/**
* 方法引用
* 1. 使用情境:当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!
*
* 2. 方法引用本质上是Lambda表达式
* 方法引用是函数式接口的实例。
*
* 3. 使用格式: 类(或对象) :: 方法名
*
* 4. 具体分为如下的三种情况:
* 情况1 对象 :: 非静态方法(实例方法)
* 情况2 类 :: 静态方法
* 情况3 类 :: 非静态方法(实例方法)
*
* 5. 方法引用使用的要求:要求接口中的抽象方法的形参列表和返回值类型与方法引用的方法的
* 形参列表和返回值类型相同!(针对于情况1和情况2)
*/
public class MethodRefTest {
/**
* 情况一:对象 :: 实例方法
* Consumer中的 void accept(T t)
* PrintStream中的 void println(T t)
*/
@Test
public void test1() {
// Consumer<String> con = str -> System.out.println(str);
// con.accept("北京");
PrintStream ps = System.out;
Consumer<String> con = ps::println;
con.accept("beijing");
}
/**
* Supplier中的 T get()
* Employee中的 String getName()
*/
@Test
public void test2() {
Employee emp = new Employee(1001,"Tom",23,5600);
// Supplier<String> sup = () -> emp.getName();
// System.out.println(sup.get());
Supplier<String> sup = emp::getName;
System.out.println(sup.get());
}
/**
* 情况二:类 :: 静态方法
* Comparator中的 int compare(T t1,T t2)
* Integer中的 int compare(T t1,T t2)
*/
@Test
public void test3() {
// Comparator<Integer> com = (t1,t2) -> Integer.compare(t1,t2);
// System.out.println(com.compare(12,21));
Comparator<Integer> com = Integer::compare;
System.out.println(com.compare(12,3));
}
/**
* Function中的 R apply(T t)
* Math中的 Long round(Double d)
*/
@Test
public void test4() {
// Function<Double,Long> func = d -> Math.round(d);
// System.out.println(func.apply(12.3));
Function<Double,Long> func = Math::round;
System.out.println(func.apply(12.6));
}
/**
* 情况三:类 :: 实例方法
* Comparator中的 int compare(T t1,T t2)
* String中的 int t1.compareTo(t2)
*/
@Test
public void test5() {
// Comparator<String> com = (s1,s2) -> s1.compareTo(s2);
// System.out.println(com.compare("abc","abd"));
Comparator<String> com = String::compareTo;
System.out.println(com.compare("abd","abm"));
}
/**
* BiPredicate中的 boolean test(T t1, T t2)
* String中的 boolean t1.equals(t2)
*/
@Test
public void test6() {
// BiPredicate<String,String> pre = (s1,s2) -> s1.equals(s2);
// System.out.println(pre.test("abc","abc"));
BiPredicate<String,String> pre = String::equals;
System.out.println(pre.test("abc","abd"));
}
/**
* Function中的 R apply(T t)
* employee中的 String getName()
*/
@Test
public void test7() {
Employee employee = new Employee(1001, "Jerry", 23, 6000);
// Function<Employee,String> func = e -> e.getName();
// System.out.println(func.apply(employee));
Function<Employee,String> func = Employee::getName;
System.out.println(func.apply(employee));
}
}
javase:方法引用
最新推荐文章于 2023-12-03 10:36:00 发布