一直对lambda表达式不是很了解,这里先记录一下方法引用
以下为几种引用方式
对象::实例方法,将lambda的参数当做方法的参数使用
类::静态方法,将lambda的参数当做方法的参数使用
类::实例方法,将lambda的第一个参数当做方法的调用者,其他的参数作为方法的参数
类::new,将lambda的参数当做构造方法参数,最后一个参数为返回的类。如果构造方法无参数,则lambda参数只有一个,就是返回的类
示例:
// 类名::静态方法
// lambda参数为对应的方法参数
Function<Integer, String> f1 = String::valueOf;
// 与下面的声明相同
IntFunction<String> f2 = String::valueOf;
// 类名::实例方法
// 第一个参数为对象实例,第二个参数为对应的方法参数
BiPredicate<String, String> p = String::equals;
// 类名::new
// 无参数构造方法
Supplier<List> s1 = ArrayList<String>::new;
// 类名::new
// 有参数构造方法。第一个参数为构造方法参数,第二个参数为返回的类
Function<Integer, List> f3 = ArrayList<String>::new;
// 类名::实例方法
// 第一个参数为实例,第二个参数为对应的方法参数
Function<List, Integer> f4 = List::size;
// 类名::实例方法
// 对于无参数的实例方法,第一个参数为返回的值
Predicate<String> p2 = String::isEmpty;
// 类名::实例方法
// 对于多个参数的实例方法,第一个参数为实例,第二个参数为对应的方法参数,第三个参数为对应的方法返回值
BiFunction<String,Integer,String> f5 = String::substring;