文档章节

Java8 lambda第一弹

零二一七
 零二一七
发布于 2017/08/28 22:12
字数 501
阅读 66
收藏 1
点赞 0
评论 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

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

© 著作权归作者所有

零二一七
粉丝 38
博文 60
码字总数 29344
作品 0
海淀
程序员
Java8实战 — Lambda表达式详解

Lambda管中窥豹 可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数、函数主体和返回类型,可能还有一个可以抛出的异常列表。 何为更简介,做一个例子,...

杰克鹏仔
2016/12/27
16
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表达式

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

mifans
2016/11/02
19
0
30分钟入门Java8之方法引用

30分钟入门Java8之方法引用 作者:@JohnTsai 本文为作者原创,转载请注明出处:https://www.cnblogs.com/JohnTsai/p/5806194.html 30分钟入门Java8之方法引用 前言 之前两篇文章分别介绍了J...

spinachgit
01/12
0
0
名词王国里的新政-解读Java8之lambda表达式

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

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

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

kymjs张涛
2017/10/30
0
5
Java8-初识Lambda

廉颇老矣,尚能饭否 Java,这位已经20多岁的编程语言,称得上是编程语言界的老大哥了。他曾经攻城略地,碾压各路编程语言小弟,风光无限,不可一世。现在,也是家大业大,江湖地位,很难撼动...

Jackie_Zheng
2017/09/17
0
0
java8新特性介绍

一:接口的默认方法 Java8允许开发者通过使用关键字default向接口中加入非抽象方法。这一特性被称为扩展方法。

yjpfj1203
2016/12/15
17
0
Java8 lambda使用总结-结合实例介绍

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

陈小扁
2016/07/01
2K
1
利用java8新特性实现类似javascript callback特性

Java8的新特性之一,就是首次引入了函数式编程Lambda表达式,按oracle的说法,是为了引导java向函数式编程的方向发展。 在JDK1.8中,多了一个包,java.util.function,这里主要用到了这个包下...

Acce1erator
2015/12/02
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android 复制和粘贴功能

做了一回搬运工,原文地址:https://blog.csdn.net/kennethyo/article/details/76602765 Android 复制和粘贴功能,需要调用系统服务ClipboardManager来实现。 ClipboardManager mClipboardM...

她叫我小渝
26分钟前
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
43分钟前
4
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0
There is no session with id[xxx]

参考网页 https://blog.csdn.net/caimengyuan/article/details/52526765 报错 2018-07-19 23:04:35,330 [http-nio-1008-exec-8] DEBUG [org.apache.shiro.web.servlet.SimpleCookie] - Found......

karma123
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部