文档章节

Java8 lambda

老菜鸟0217
 老菜鸟0217
发布于 2017/08/28 22:12
字数 532
阅读 67
收藏 0

何为lambda?

(Computer c1, Computer c2) -> c1.getPrice().compareTo(c2.getPrice());

上面是一个lambda表达式,等价于匿名内部类:

new Comparator<Computer>() {
        @Override
        public int compare(Computer c1, Computer c2) {
            return c1.getPrice().compareTo(c2.getPrice());
        }
};

Q:区别在哪呢?

A: 简洁了 (上面的lambda在一个具体的上下文中还可以继续简化)

lambda表达式,可以理解为一种可传递的匿名函数

函数:不像方法一样属于某个类,但有参数列表,返回类型,还可以抛出异常

匿名:没有函数名称

传递:表达式可以作为参数传递

在哪使用?

上面和匿名内部类的对比,不难发现,在一些需要使用匿名内部类的地方,就可以用lambda代替。

Java8中,对lambda的使用做了引导和规范,一般在函数式接口上使用lambda。

函数式接口是什么?

函数式接口就是只定义了一个抽象方法的接口,比如Java8之前就有的Comparator,Runnable

Java8中用注解@FunctionalInterface来标识函数式接口

lambda表达式可以很方便地为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例。

当然你可以说,用匿名内部类也可以搞定这一切,没错,以下2种方式均可实现Computer的排序:

computerList.sort(new Comparator<Computer>() {
            @Override
            public int compare(Computer c1, Computer c2) {
                return c1.getPrice().compareTo(c2.getPrice());
            }
});
computerList.sort((c1, c2) -> c1.getPrice().compareTo(c2.getPrice()));

 Java 引入lambda,绝不是为了替代匿名内部类那么简单。lambda是一个利器,为一些创新的思想做好了基本的铺垫,比如Java8引入的Stream,管中窥豹一下:

computerList.stream() //流化
    .filter(c -> c.getPrice() < 5000) //价格<5000
    .sorted(Comparator.comparing(Computer::getPrice).reversed()) //降序
    .limit(2) //取前2个记录
    .map(Computer::getCode) //提取电脑编号
    .collect(Collectors.toList()); //汇总成List

想象一下:如果用面向对象处理,需要多少行?需要声明多少个中间变量?

© 著作权归作者所有

老菜鸟0217
粉丝 47
博文 84
码字总数 43017
作品 0
海淀
程序员
私信 提问
spark2.x由浅入深深到底系列六之RDD 支持java8 lambda表达式

学习spark任何技术之前,请正确理解spark,可以参考:正确理解spark 我们在 http://7639240.blog.51cto.com/7629240/1966131 中已经知道了,一个scala函数其实就是java中的一个接口,对于jav...

tangweiqun
2017/09/20
0
0
名词王国里的新政-解读Java8之lambda表达式

前几天在reddit上看到Java8 M8 Developer Preview版本已经发布了,不免想要尝鲜一把。Developer Preview版本已经所有Feature都完成了,Java8的特性可以在这里看到http://openjdk.java.net/p...

黄亿华
2013/09/15
1K
11
AndroidStudio3 支持 Java8 了,就问你敢用吗

本文开源实验室原创,转载请以链接注明:https://kymjs.com/code/2017/10/26/01/ 支持 Java 8 kotlin 相关的东西很早以前我就在讲了,这里就不再细说了。AS3里面有一个亮眼的特性就是支持J8。...

kymjs张涛
2017/10/30
915
5
Java8 Lambda表达式

函数式接口 理解Functional Interface(函数式接口,以下简称FI)是学习Java8 Lambda表达式的关键所在,所以放在最开始讨论。FI的定义其实很简单:任何接口,如果只包含唯一一个抽象方法,那...

mifans
2016/11/02
79
0
Java8 lambda使用总结-结合实例介绍

1.Java8 新特性介绍 写java的同学对java8肯定知道 那么java8到底有哪些特性呢,总结如下: 最核心的当然是函数式编程了,写代码非常简单,请看下面详细例子介绍 2.Java8 lambda使用总结-结合...

陈小扁
2016/07/01
3.5K
4

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
12
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
8
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
11
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部