javase:方法引用

本文详细介绍了Java中的方法引用,包括对象::实例方法、类::静态方法和类::实例方法等三种情况,以及它们在Lambda表达式中的应用。通过实例展示了如何使用方法引用简化代码,涉及Consumer、Supplier、Comparator等多个函数式接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 方法引用
 * 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));
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值