/*
* 方法引用: 简化Lambda-->Lambda表达式特殊的一种表现形式
* 当lambda体中的实现是通过调用另外一个方法实现的时候,这个方法的参数列表和返回值类型与抽象方法的参数列表与返回值一致的时候,就可以使用方法引用进行代替
*
* 方法引用
* 引用::成员方法名
* 类名::静态方法名
* 类名::成员方法名
*
* 构造器引用
* 类名::new
*
* 注意事项:当使用方法引用时(1)返回值类型匹配
* (2)参数类型匹配 Comparator<Integer> com = (i1,i2)->Integer.compare(i1, i2); 两个小括号中的类型和参数个数要相同
* (3)抽象方法第一个参数s1作为内部引用另一个方法的对象存在,如果抽象方法存在多个参数,第二个参数开始匹配内部引用的方法的参数列表
* BiPredicate<String,String> pre = (s1,s2)->s1.equals(s2);
*/
public class FunctionQ02 {
public static void main(String[] args) {
List<String> list=new ArrayList();
list.add("123");
list.add("12");
list.add("1");
//引用::成员方法名
//遍历容器,打印里面的每一个数据
list.forEach((o)->{
System.out.println(o);
});
//Lambda体实现的功能就是打印参数-->可以通过方法引用来代替
//通过PrintStream这个类型 的对象调用println实现的,Lambda的抽象方法的参数做为println方法的参数,都没有返回值
PrintStream ps=System.out;
list.forEach(ps::println);
//类名::静态方法名
//比较2个double参数,返回最大的
//2个参数 1个返回值 BiFunction
BiFunction<Double,Double,Double> bi=(b1,b2)->Math.max(b1,b2);
//lambda的实现求2个参数的最大值是通过调用另外一个方法实现的,并且抽象方法的参数作为内部引用的方法的参数,引用方法的返回值作为抽象方法的返回值-->方法引用
bi=Math::max;
System.out.println(bi.apply(100.0,200.0));
//比较2个int类型的参数
Comparator<Integer> com = (i1, i2)->Integer.compare(i1, i2);
com = Integer::compare;
//类名::成员方法名
//比较2个字符串是否相等 2个字符串参数 布尔类型
BiPredicate<String,String> pre=(s1,s2)->s1.equals(s2);
pre=String::equals;
System.out.println(pre.test("zhangsan","zhangsan1"));
//供给型
Employee e=new Employee("熊大",5);
Supplier<String> sup=()->e.getName();
sup=e::getName;
System.out.println("名字为="+sup.get());
Function<Employee,String> func=Employee::getName;
System.out.println(func.apply(e));
}
}
使用方法引用简化Lambda表达式
最新推荐文章于 2022-08-13 12:07:17 发布