1.函数式接口作为方法参数:多线程
例如 java.lang.Runnable
接口就是一个函数式接口,假设有一个newThread
方法使用该接口作为参数,那么就可以使用Lambda
进行传参。这种情况其实和Thread类
的构造方法参数为 Runnable
没有本质区别。
public class DmoeThread {
public static void main(String[] args) {
//使用Lambda函数重写run()方法
newThread(()-> System.out.println(Thread.currentThread().getName()));
newThread(()-> System.out.println(Thread.currentThread().getName()));
newThread(()-> System.out.println(Thread.currentThread().getName()));
}
public static void newThread(Runnable run){
new Thread(run).start();
}
}
2.函数式接口作为方法返回值类型:比较器
如果一个方法的返回值类型是一个函数式接口,那么就可以直接返回一个Lambda表达式。当需要通过一个方法来获取一个 java.util.Comparator
接口类型的对象作为排序器时,就可以调该方法获取。
import java.util.Arrays;
import java.util.Comparator;
public class DemoCompare {
public static void main(String[] args) {
String[] arr= {"aaa","b","cc","ddddd"};
//按照getCompare01方法进行排序
//数组使用Arrays工具,集合使用Conllections工具
Arrays.sort(arr,getCompare01());
System.out.println(Arrays.toString(arr));
//按照getCompare02方法进行排序
Arrays.sort(arr,getCompare02());
System.out.println(Arrays.toString(arr));
}
public static Comparator<String> getCompare01(){
return new Comparator<String>() {
@Override
public int compare(String s, String t1) {
return t1.length()-s.length();
}
};
}
//方法的返回值类型为,函数式接口时,可以使用Lambda表达式
public static Comparator<String> getCompare02(){
return (String s, String t1)->s.length()-t1.length() ;
}
}