函数式接口作为方法的参数案例和函数式接口作为方法的返回值类型案例
函数式接口作为方法的参数案例
如果抛开现实原理不说,Java中的Lambda表达式可以被当作是你梦内部类的替代品。如果方法的参数是一个函数式接口类型,那么就可以使用Lambda表达式进行替代。使用Lambda表达式作为方法的参数,其实就是使用函数式接口作为方法参数。
例如java.lang.Runnable接口就是一个函数式接口,假设有一个startThread方法使用该接口作为参数,那么就可以使用Lambda进行传参。这种情况其实和Thread类的构造方法参数为Runnable没有本质的区别
package com.yang.Test.MyFunctionalInterfaceStudy.Lambda;
public class Test {
public static void startThread(Runnable task){
new Thread(task).start();
}
public static void main(String[] args){
startThread(() -> System.out.println("线程任务执行"));
}
}
函数式接口作为方法的返回值类型案例
如果一个方法的返回值类型是一个函数式接口,那么就可以直接返回一个Lombda表达式,当需要通过方法来获取一个java.util.Comparator接口类型的对象作为排序其的时候就可以调用方法获取
package com.yang.Test.MyFunctionalInterfaceStudy.Lambda;
import java.util.Arrays;
import java.util.Comparator;
public class Test {
private static Comparator<String> newComparator(){
// return new Comparator<String>() {
// @Override
// public int compare(String o1, String o2) {
// return o1.length() - o2.length();
// }
// };
return (a,b) -> b.length() - a.length();
}
public static void main(String[] args) {
String[] array = {"abc","ab","abcd"};
System.out.println(Arrays.toString(array));
Arrays.sort(array,newComparator());
System.out.println(Arrays.toString(array));
}
}