码迷,mamicode.com
首页 > 其他好文 > 详细

深入浅出lambda表达式--零基础一分钟入门

时间:2016-10-22 17:18:25      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:实现   ring   参数传递   rgs   机构   lambda   pre   art   nodename   

lambda从使用上来说,第一感觉直白的理解就是,少了很多不必要的匿名回调类的写法,比如:

    public static void main(String[] args) {
        PlatformQuery query = new PlatformQuery().createDemo();
        Runnable c = () -> { System.out.println(JsonUtils.toJson(query)); };
        Thread thread = new Thread(c);
        thread.start();
    }

对着这段代码,会打印出:

{"lists":[{"nodeId":100001,"nodeName":"机构100001","companyId":"1200","createDate":"20160101"},{"nodeId":100001,"nodeName":"机构100001","companyId":"1200","createDate":"20160101"}]}

在java 8以前,如果我们要启动一个新线程,就需要创建一个新的类或者匿名实现类,实现Runnable接口中的run()方法,然后作为参数传递个Thread来完成。

使用lambda之后,就不需要新建一个实现Runaable接口的类,直接在主线程上下文中就可以完成。其中run()实现的内容就是上文的{ System.out.println(JsonUtils.toJson(query)); };,()则是run方法的签名。

从代码直观性上来说,确实简化了很多。

再比如,对于list排序,在java 8中,我们可以直接使用list.sort(Comparator),如下所示:

        query.getLists().sort(new Comparator<Platform>() {

            @Override
            public int compare(Platform a, Platform b) {
                return Integer.compare(a.getCompanyId().length(),b.getCompanyId().length());
            }
            
        });
        

采用lambda表达式之后,我们可以使用以下两种写法:

        Comparator<Platform> com = (Platform a, Platform b) -> { return Integer.compare(a.getCompanyId().length(),b.getCompanyId().length()); };
        query.getLists().sort(com);

        query.getLists().sort((Platform a, Platform b) -> { return Integer.compare(a.getCompanyId().length(),b.getCompanyId().length()); }); -- 这是直接使用匿名lambda表达式的例子

 

进一步的,lambda能够自动推导上下文,比泛型的编译时擦除(erase)还要进一步,如下:

        Comparator<Platform> com1 = (a,b) -> { return Integer.compare(a.getCompanyId().length(),b.getCompanyId().length()); };
        
        query.getLists().sort(com1);
        
        query.getLists().sort((a, b) -> { return Integer.compare(a.getCompanyId().length(),b.getCompanyId().length()); });

 从上文可以看出,这比较像jquery中绑定事件的常见用法,凡事通过传递一个匿名函数来解决,对于基于Java的GUI编程或者使用future、以及spring JDBC等广泛依赖回调函数的应用来说,可以使代码去除很多不必要的skeleton代码。

深入浅出lambda表达式--零基础一分钟入门

标签:实现   ring   参数传递   rgs   机构   lambda   pre   art   nodename   

原文地址:http://www.cnblogs.com/zhjh256/p/5987680.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!