在日常使用Lambda表达式时,我们会在表达式中使用方法,如下案例:
实例::方法名
user s = new user();
Supplier<String> supplier = () -> s.getName();
String s1 = supplier.get();
System.out.println(s1);
函数式消费型接口:重写方法,调用时返回值。
简化后的效果:
//将创建接口对象的语句修改为如下:
Supplier<String> supplier = s::getName;
利用类的实例加方法名,直接调用:
类::方法名
ArrayList<Integer> list = new ArrayList<>();
list.add(9);
list.add(5);
list.add(2);
list.add(3);
//Comparator<Integer> comparator = (x1, x2) -> Integer.compare(x1, x2);
Comparator<Integer> comparator = Integer::compareTo;
Collections.sort(list, comparator);
值得注意的是:方法返回值要和接口需要的值相同,说实话,用这种方法我不推荐,好绕~
还有一种传入参数,返回boolean。
//BiPredicate<String, String> BiPredicate1 = (x1,x2)->x1.equals(x2);
BiPredicate<String, String> BiPredicate1 = String::equals;
System.out.println(BiPredicate1.test("我也是", "我也是"));
这个也是和上面一样,x1为调用方法者,x2为参数。
还可以使用传入一个参数,返回值:
package jdk8Special.lambda;
import java.util.function.Function;
public class text4 {
public static void main(String[] args) {
// lambdm构造方法的使用
Function<Integer, String[]> function1 = (x) -> new String[x];
String[] arr1 = function1.apply(20);
System.out.println(arr1.length);
Function<Integer, String[]> function2 = String[]::new;
String[] arr2 = function2.apply(10);
System.out.println(arr2.length);
}
}
了解就好了,我觉得好像变麻烦了、、、