Lambda_作为参数和返回值
如果抛开实现原理不说,Java中的Lambda表达式可以被当作是匿名内部类的替代品。如果方法的参数是一个函数式接口类型,那么就可以使用Lambda表达式进行替代。使用Lambda表达式作为方法参数,其实就是使用函数式接口作为方法参数。
例如 java.lang.Runnable 接口就是一个函数式接口,假设有一个startThread 方法使用该接口作为参数,那么就可以使用Lambda进行传参。这种情况其实和Thread 类的构造方法参数为Runnable 没有本质区别。
public class RunableImpl { //Runnable是一个函数式接口 public static void startThread(Runnable run){ //Thread实现Runnable接口,启动线程 new Thread(run).start(); } public static void main(String[] args) { //给Runnble接口实现一个方法 startThread(()->System.out.println("线程开始执行任务!")); } }
类似地,如果一个方法的返回值类型是一个函数式接口,那么就可以直接返回一个Lambda表达式。当需要通过一个方法来获取一个java.util.Comparator 接口类型的对象作为排序器时,就可以调该方法获取。
public class ComparatorImpl { public static Comparator<String> newComparator(){ /*return new Comparator<String>() { @Override public int compare(String o1, String o2) { //按照字符串降序排序 return o2.length()-o2.length(); } };*/ //方法的返回值类型是一个函数式接口,所以我们可以返回一个Lambda表达式 /*return (String o1,String o2)->{ return o2.length()-o2.length(); };*/ //继续优化Lambda表达式 return (o1,o2)->o2.length()-o1.length(); } public static void main(String[] args) { String[] arr={"a","bb","ccc","dddd"}; System.out.println("排序之前:"+Arrays.toString(arr)); Arrays.sort(arr,newComparator()); System.out.println("排序之后:"+Arrays.toString(arr)); } }
其中直接return一个Lambda表达式即可。
学习中,博客都是自己学习用的笔记,持续更新改正。。。