lambda 表达式大家在工作中用的多么,小白看了好多遍也理解不住

2019-11-29 15:58:30 +08:00
 wuwudeqi
13039 次点击
所在节点    Java
91 条回复
JCZ2MkKb5S8ZX9pq
2019-11-30 12:45:10 +08:00
@lewinlan 你这个情况好像不写 lambda 也行吧?
a if condition else b 这个简写就可以吧。

另外我一般 sorted 的时候是常用到,从字典深处取出或者计算个排序条件。
inorilzy
2019-11-30 13:03:42 +08:00
Python 中 pep 规范不建议使用 lambda,一般和 map reduce filter sorted 等函数一起用
raiz
2019-11-30 15:21:05 +08:00
Kotlin 的 lambda 是目前见过的最舒服的哈哈
xfriday
2019-11-30 16:02:43 +08:00
就是匿名函数,别当是什么高级货
bluehr
2019-11-30 16:48:36 +08:00
推荐《 Java8 实战》,看这本书看了就会了
6IbA2bj5ip3tK49j
2019-11-30 17:18:22 +08:00
回楼主:这玩意儿多用,就会上瘾了。

------
回楼上某些人:
都快 2020 年了,CRUD 项目还不用 lambda,那可真够水的。
至于自己是不是在做 CRUD 项目,心中有数就行。
FrankHB
2019-11-30 21:11:11 +08:00
看来又是个 ALGOL-like 语言学残的……补习一下历史罢。
世界上本来就没什么正经的函数(function) ,先是在 1930 年代 A.Church 提出 λ 演算里用于替换绑定变量为其它表达式的 λ 抽象以及把 λ 抽象绑定到一个名称作为变量的用法,后是 1950 年代 J.McCarthy 明确用这样的方法,来实现的一般意义上的所谓的函数。这样,λ 抽象实质上就是所谓的匿名函数(anonymous) 。(在原始的 λ 演算中,这些匿名函数都是所谓的纯函数(pure function) ,之后有另外的扩展,但这个意义上正经地搞是在 1970 年代以后的事。)
之后(从 1950 年代末开始),一坨不上道的 ALGOL-like 语言把函数弱化成过程(procedure) 乃至子例程(subroutine) 偷换概念,让函数总是总是具有所谓的函数名,先接触这类语言入门的用户就被念歪经的设计整残了;如 Java 之流的更叒鸡的语言把过程继续阉割,去掉了所谓的自由函数(free function) ,叠床架屋依附于所谓的对象(原本对象就跟类的实例无关,考虑到 Java 照抄某些语言的历史,这里是牵强附会)之上,搞出什么方法(method) ,数典忘祖;于是用这样的语言入门的用户更加不会正常的思维方式了。现在一坨语言重新引入 lambda 表达式来表达 λ 抽象,说到底不过是矫治习惯不正常的理解困难的设计的症状,要求端正视听罢了——只不过很遗憾,因为兼容和历史包袱,已有的半残的“函数”或者更残废的“方法”的语法还是被保留,以至于理解起来更容易迷糊和浪费时间。
(至于在子例程以外的函数的其它实现,如 coroutine 和 continuation 也是很早的支线,比 Java 资格老大概 30 年,这里按下不表,等 Java 之流的语言先赶上再说。)

当然,不够正经的、歧义满天飞的所谓函数数学早已有之,历史上翻来覆去倒腾了几百年也没个谱,后来才发现严格意义上可以是一回事(例如,以所谓可计算函数(computable function) 作为模型): https://en.wikipedia.org/wiki/History_of_the_function_concept
和这样的模型比较接近的是一般大学高等数学会教你的基于 Cartesian product 模型化的映射(map) 。数学中更常见的所谓的“函数”和泛函(functional) 都是其缩水版,要求值域是实数,这在日常应用中往往是多余的限制;高中用的“函数”的 Dirchlet 定义,更是连定义域都锁死了,也不讲上域(codomain) ;除了数理逻辑讨论的一些概念,对语法和语义的分割也聊胜于无。所以对理解关心如何用代码的描述和解决计算问题的角度来说,用这些不够严格的传统数学概念,大多讲了白讲。
现代编程语言常规支持表达的某一类偏可计算函数(partial computable function),除了不可解度(不超越图灵完备)以外,比映射能实现的计算作用(computational effect) 更强,例如允许副作用(side effect) ,也不要求是全函数(totality) 保证确定性终止。(倒是某些 FP 语言会别有用心地妄想把其中某几个特性干掉给阉回去。) Java 之流虽然叒鸡,但是比起来还算是比较正经的了。
exoticknight
2019-12-01 18:17:51 +08:00
不就是匿名函数?为什么纠结……
QdouHuiQwaiLai
2019-12-02 09:38:59 +08:00
在 python 里面就是只能写一行的匿名函数吧 不用也没关系
yinft
2019-12-02 09:51:27 +08:00
题主是不是没写过 js,写一段时间 js,再回头 java 用 lambda,你就会发现很顺手了
thinkmore
2019-12-03 09:03:03 +08:00
@wuwudeqi 看看这篇文章,我觉得写得还可以 https://juejin.im/post/5d536870e51d4561c6784066

建议先从简单的写起,先用来改造你的 for 循环,然后再一步一步试探

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/624350

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX