lambda的另一种写法方法引用(双冒号)

学习笔记


import java.io.PrintStream;
import java.util.Comparator;
import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;

import org.junit.Test;

import com.it.entity.Employee;

public class TestLambda4 {

	/*
	 * 一、方法引用:若Lanmbda 体中的内容有犯法已经实现了,我们可以使用"方法引用"
	 * 			(可以理解为方法引用是Lambda表达式 的另外的一种表现形式)
	 * 
	 * 主要的三种语法格式:
	 * 
	 * 		对象::实例方法名
	 * 		类::静态方法名
	 * 		类::实例方法名
	 * 
	 * 注意:
	 * 	①Lambda体中调用方法的参数列表与返回值类型要与,函数式接口中抽象方法的函数列表和返回值类型保持一致
	 *  ②Lambda 参数列表中的第一参数是实例方法的调用者,而第二个参数是实例方法的参数时,可以使用ClassName::method
	 *  
	 *  二、构造器引用
	 *  
	 *  格式: ClassName :: new
	 *  
	 *  注意:需要调用的构造器的参数列表要与函数式接口中的抽象方法的参数列表保持一致
	 *  
	 *  三、数组引用:
	 *   Type[]:: new
	 * 
	 */
	
	//对象::实例方法名
	@Test
	public void test1() {
		PrintStream ps1 = System.out;
		
		Consumer<String> con = (x) -> ps1.println(x);
	
		PrintStream ps2 = System.out;
		
		Consumer<String> con1 = ps2::println;
		
		Consumer<String> con2 = System.out::println;
		con2.accept("aabbcc");
		
	}
	
	//对象::实例方法名
	@Test
	public void test2() {
		
		Employee emp = new Employee();
		Supplier<String> sup = () -> emp.getName();
		String name = sup.get();
		System.out.println(name);
		
		Supplier<Integer> sup2 = emp::getAge;
		System.out.println(sup2.get());
		
	}
	
	//类::静态方法名
	@Test
	public void test3() {
		
		Comparator<Integer> com = (x,y) -> Integer.compare(x, y);
		
		Comparator<Integer> com2 = Integer::compare; 
	}

	//类::实例方法名
	@Test
	public void test4() {
		
		BiPredicate<String, String> bp = (x,y) -> x.equals(y);

		BiPredicate<String, String> bp2 = String::equals;
		
	}
	
	//构造器的引用
	
	@Test
	public void test5() {
		
		Supplier<Employee> sup = () -> new Employee();
		
		Supplier<Employee> sup2 = Employee::new;
		Employee emp = sup2.get();
		
		System.out.println(emp);
	}
	
	@Test
	public void test6() {
		
		//这里需要新增一个Employee的构造方法
		Function<Integer,Employee> fun = (x) -> new Employee(x);

		//无参的构造
		Function<Integer,Employee> fun2 = Employee::new;
	}
	
	
	
	
	
}



案例

  1. 数组的引用

	@Test
	public void test7() {
		
		Function<Integer,String[]> fun = (x) -> new String[x];
		String[] strs = fun.apply(10);
		System.out.println(strs.length);

		Function<Integer,String[]> fun2  = String[]::new;
		String[] strs2 = fun2.apply(20);
		
		System.out.println(strs2.length);
	}
	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值