赞
踩
函数式接口
问:Lambda 表达式的类型是什么?
答:函数式接口
问:函数式接口是什么?
答:只包含一个抽象方法的接口,称为函数式接口 (functional interface) , 一般用 @FunctionalInterface
注解来检测是否是函数式接口。
-
- @FunctionalInterface
- public interface MyFunctionalInterface {
- String test(String p);
- }
-
- 使用泛型
- @FunctionalInterface
- public interface MyFunctionalInterface<T,R> {
- R test(T t);
- }
如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386
- public void test(MyFunctionalInterface mfi,String str) {
- System.out.println(mfi.getValue(str));
- }
-
- 调用test()
- test(p -> p.toUpperCase(),"luojie");
- 控制台输出:
- LUOJIE
问:什么是方法引用?
答:当我们需要完成的 Lambda 体操作,已经有实现的方法了,可以使用方法引用!
问:为什么用方法引用?
答:省略参数,少写代码
- Comparator<Integer> com2 = (x, y) -> Integer.compare(x,y);
- //上面我们之前学过的Lambda表达式,其中Lambda体操作是比较两个整数的大小,
- //而且Integer的compare()正好完就是我需要完成的操作。
- //可以方法引用替代
- Comparator<Integer> com3 = Integer::compare;
方法引用使用操作符 :: 将方法名和对象或类的名字分开。
分三种格式:
类::静态方法
对象::实例方法
类::实例方法
类::静态方法
- (x, y) -> Integer.compare(x,y);
- 方法引用改造:
- Integer::compare;
对象::实例方法
- (x) -> System.out.printf(x);
- 方法引用改造:
- System.out::println;
类::实例方法
- test((x,y)->x.equals(y),"123","123");
- 方法引用改造:
- test(String::equals,"123","abc");
- 注意:当引用方法的第一个参数是调用对象,并且第二个参数是需要传入参数(或无参数)时:ClassName::methodName
- 比如上例子中:"123"当作equals方法调用对象,"abc"为传入equals()参数。
- 相当于:"123".equals("abc")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。