一,前言

简单的来说就是把方法当成参数传递到stream内部, 使每个元素都传入到该方法里面执行一下, 具体模式:

//类名::方法名
//静态方法引用,通过类名::静态方法名
Integer::parseInt
//实例方法引用,通过实例对象::实例方法
str::substring
Person::getAge
//构造方法引用,通过类名::new
User::new
HsahMap :: new

即函数式编程, JS就是最经典的函数式编程语言(JS提供了强大的功能-闭包,相对于传统方法优势明显, 闭包本身做为一个可调用对象),Java现在提供的最接近闭包的概念便是Lambda表达式, 不过两者还是有着明显的差别的,至少Lambda表达式是闭包很好的替代者。

二,方法引用

可以将方法的引用赋值给一个变量,通过赋值给Function,说明方法引用也是一种函数式接口的书写方式,Lambda表达式也是一种函数式接口,Lambda表达式一般用于自己提供方法体,而方法引用一般直接引用现成的方法。

	//// 使用双冒号::来构造静态函数引用
	Function<String, Integer> fun = String::length;
        Integer value = fun.apply("length");
        System.out.println(value);

	 // 使用双冒号::来构造非静态函数引用
	String content = "Hello JDK8";
    	Function<Integer, String> func = content::substring;
    	String result = func.apply(1);
    	System.out.println(result);

	// 构造函数引用
    	BiFunction<String, Integer, User> uFunction = User::new;
    	User user = uFunction.apply("jiangdalong", 18);
    	System.out.println(user.toString());

	// 函数引用也是一种函数式接口,所以也可以将函数引用作为方法的参数
    	sayHello(String::toUpperCase, "hello");
// 方法有两个参数,一个是
private static void sayHello(Function<String, String> func, String parameter){
    String result = func.apply(parameter);
    System.out.println(result);
}

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

脸朝大海, 春暖花开 ----江大脸