zoukankan      html  css  js  c++  java
  • 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表达式即可。

    学习中,博客都是自己学习用的笔记,持续更新改正。。。
  • 相关阅读:
    jQueryfocus,title,振动
    使用jQuery自动缩图片 (转载)
    jQuery10个小例子(jquery之旅).
    jQuery动态增加删除Tabs
    jQuery图片播放轮换
    jQuery插件上传控件美化
    Ajax简单
    jQuery仿QQ改版后的样式切换
    jQuery插件tooltip(超链接提示,图片提示).
    css分页样式
  • 原文地址:https://www.cnblogs.com/Tunan-Ki/p/11837989.html
Copyright © 2011-2022 走看看