lambda 运算符表达式 (q,z)={.......}怎么解释

lambda表达式模糊查询怎样写_百度知道
lambda表达式模糊查询怎样写
我有更好的答案
ForEach(s =& C
list.Where(s =& System.T).Add(&);ABC2&quot?&quot.*.WriteLine(s));
list.Add(&IABC1&quot.RegularExpressions.Regex.Match(s,&^ABC.Success).Select(s =& s).ToList(););
list.Add(&IABC2&);
list.Add(&ABC1&);
listList&string& list = new List&string&()
为您推荐:
其他类似问题
lambda表达式的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。术语&Lambda表达式'是来自于&拉姆达&演算这又是施加用于定义功能的数学符号及其名称。 lambda表达式作为LINQ式的可执行部分转换的方式在运行时的逻辑,因此它可以传递到数据源方便。但是,lambda表达式不仅仅局限于查找应用LINQ而已。
这些表达式由下面的语法表示:
(输入参数) =& 表达式或语句块
下面是lambda表达式的一个例子
y =& y * y
上述表达式指定一个参数y和y的值的平方。然而,这是不可能的到这种形式来执行一个lambda表达式。在C#中的lambda表达式的例子如下所示。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace lambdaexample
class Program
delegate int del(int i);
static void Main(string[] args)
del myDelegate = y =& y * y;
int j = myDelegate(5);
Console.WriteLine(j);
Console.ReadLine();
Module Module1
Private Delegate Function del(ByVal i As Integer) As Integer
Sub Main(ByVal args As String())
Dim myDelegate As del = Function(y) y * y
Dim j As Integer = myDelegate(5)
Console.WriteLine(j)
Console.ReadLine()
End Module
当C#或VB的上述代码被编译和执行时,它产生了以下结果:
表达Lambda
如在lambda表达式的上面所示的语法表达是在右手侧,这些也被称为lambda表达式。
异步Lambdas
通过使用异步关键字结合异步处理创建lambda表达式被称为异步lambda表达式。下面是异步lambda的一个例子。
Func&Task&string&& getWordAsync = async() =& &hello&;
Lambda的标准查询操作
查询运算符内的lambda表达通过在需要时相同的评估计算,并不断地作用于各输入序列中的元素,而不是整个序列。 开发人员允许Lambda表达式到自己的逻辑转换成标准查询操作.在下面的例子中,开发人员使用的&Where&运算符,通过利用lambda表达式的回收,从给出的列表中奇数值。
//Get the average of the odd Fibonacci numbers in the series...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace lambdaexample
class Program
static void Main(string[] args)
int[] fibNum = { 1, 1, 2, 3, 5, 8, 13, 21, 34 };
double averageValue = fibNum.Where(num =& num % 2 == 1).Average();
Console.WriteLine(averageValue);
Console.ReadLine();
Module Module1
Sub Main()
Dim fibNum As Integer() = {1, 1, 2, 3, 5, 8, 13, 21, 34}
Dim averageValue As Double = fibNum.Where(Function(num) num Mod 2 = 1).Average()
Console.WriteLine(averageValue)
Console.ReadLine()
End Module
让我们编译和运行上面的程序,这将产生以下结果:
lambda类型推断
在C#中,类型推断方便地用于各种情况,而且也没有明确指定的类型。但是如果一个lambda表达式,类型推断将工作必须满足在已指定每种类型为编译器。让我们考虑下面的例子。
delegate int Transformer (int i);
这里,编译器采用的类型推理时的事实,x是一个整数,这是通过检查所述变压器的参数类型进行绘制。
Lambda表达式变量的作用域
有而这样的lambda表达式内发起变量的lambda表达式,使用变量的作用域并不意味着是可见的外部方法有一些规则。还有一个规则,一个捕获变量不是被垃圾回收,除非委托引用相同变得符合垃圾收集的行为。此外,还有禁止lambda表达式中的return语句导致返回封闭方法的规则。
这里有一个例子,以证明lambda表达式变量的作用域。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace lambdaexample
class Program
delegate bool D();
delegate bool D2(int i);
class Test
public void TestMethod(int input)
int j = 0;
// Initialize the delegates with lambda expressions.
// Note access to 2 outer variables.
// del will be invoked within this method.
del = () =& { j = 10; return j & input; };
// del2 will be invoked after TestMethod goes out of scope.
del2 = (x) =& { return x == j; };
// Demonstrate value of j:
// The delegate has not been invoked yet.
Console.WriteLine(&j = {0}&, j);
// Invoke the delegate.
bool boolResult = del();
Console.WriteLine(&j = {0}. b = {1}&, j, boolResult);
static void Main()
Test test = new Test();
test.TestMethod(5);
// Prove that del2 still has a copy of
// local variable j from TestMethod.
bool result = test.del2(10);
Console.WriteLine(result);
Console.ReadKey();
让我们编译和运行上面的程序,这将产生以下结果:
j = 10. b = True
Lambda表达式中使用表达式树结构广泛。表达式树放弃代码中的数据结构类似于树,其中每个节点本身是一样的方法调用的表达,或者可以是一个二进制运算如x&y,下面是lambda表达式的使用用于构造一个表达式树的一个例子。
LAMBDA语句
还有lambda表达式由两个或三个语句,但不仅在构造表达式树中。 return语句必须写在lambda语句。
lambda声明的语法
(params) =& {statements}
lambda的声明示例
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
namespace lambdaexample
class Program
static void Main(string[] args)
int[] source = new[] { 3, 8, 4, 6, 1, 7, 9, 2, 4, 8 };
foreach (int i in source.Where(
if (x &= 3)
return true;
else if (x &= 7)
return true;
return false;
Console.WriteLine(i);
Console.ReadLine();
让我们编译和运行上面的程序,这将产生以下结果:
lambda表达式被用作基于方法的LINQ查询参数,并决不允许有一个地方对操作的左侧像是或者就像匿名方法。 虽然,Lambda表达式何其相似匿名方法,这些根本不是限制被用来作为唯一表示。
使用lambda表达式要点要记住
lambda表达式可以返回一个值,并可以带有参数。
参数可以用不同的方式使用lambda表达式无数的定义。
如果在一个lambda表达式单独的语句,就没有必要花括号,而如果有多个语句,大括号以及返回值都是写必不可少的。
随着lambda表达式,可以通过被称为闭合的特征来访问变量lambda表达式块的存在之外。利用闭合的应谨慎,以避免任何问题。
这是不执行任何lambda表达式中的任何不安全的代码。
lambda表达式并不意味着使用操作符的左侧。
易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。
上一篇:下一篇:
加QQ群啦,易百教程官方技术学习群
所有其它免费技术学习QQ群,请点击:
人数/免费/等级
2000人/否/LV5
Java基础,JSP(Servlet),JAVA框架,Java高并发架构,Maven等等
2000人/否/LV5
SQL基础,MySQL基础,MySQL存储过程,视图,触发器等等
大数据开发
2000人/否/LV5
Spark,zookeeper,kafka,CDH,hive,fulme,hbase等Hadoop云计算生态圈技术
Python技术
2000人/否/LV5
Python编程,Python Web,Python大数据,Python爬虫,自然语言处理等
测试工程师(新群)
1000人/是/LV1
软件测试,硬件测试,测试平台开发,黑白盒测试,Labview等技术
前端技术群(新群)
1000人/是/LV1
CSS,HTML/HTML5,JS/JQuery/VueJS/AngularJS等技术
2000人/是/LV5
Redhat/Centos,Ubuntu,Shell,运维,监控等技术
2000人/是/LV5
PHP基础,PHP高级,网站优化/架构,JS,HTML,JQuery等Web技术
2000人/是/LV5
人工智能,深度学习,算法等技术
Oracle数据库
2000人/是/LV5
SQL基础,Oracle基础,Oracle存储过程,视图,触发器等
Android开发
2000人/是/LV1
Android开发,Android Studio,Kotlin,Dagger等技术
2000人/是/LV1
C#,ASP.Net,VB.Net,ADO.Net,SQL Server,VBA,Excel等技术
数据分析师
2000人/是/LV1
R语言,Matlab语言,Pandas等技术
所有其它免费技术学习QQ群,请点击:拒绝访问 | www.wangchao.net.cn | 百度云加速
请打开cookies.
此网站 (www.wangchao.net.cn) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3d76ce32b0554ccc-ua98).
重新安装浏览器,或使用别的浏览器如何避免Lambda表达式毁了你的世界 - ImportNew
| 标签: ,
代码与野兽
在Java8中,引入的Lambda表达式(译者注:来自函数式编程思想)无疑是最受关注的。但是自这个新闻被公布的几个月以来,我还没见到过有哪些项目是Lambda起着关键作用的。
确实,众人所知的Lambda表达式一直被学术界、研讨会和社区宣扬对java是百利而无一害。但是经过时间的考验后,Lamdba是否依然像培根芝士汉堡那样美妙而又让人称赞呢?你又是否会因为日常工作需要用到它而去寻找更多关于Lamdba的资料呢?
让我们马上来看看奇妙的Lambda表达式在我们的代码中的运用:
public class RuinLambdas {
public static void main(String[] args) {
startDream(new Dream() {
@Override public void dream() {
// Dream boy, dream ...
startDream(new AugmentedDream() {
@Override public void dream(String dreamName) {
// Dream boy, dream ...
// Less easy
startDream(() -& { /* Dream boy, dream ... */ });
// And now kid ? ...
startDream((dreamName) -& { /* Dream boy, dream ... */ });
// Do you see which one it is directly by reading this ? ...
startDream((dreamName, duration) -& { /* Dream boy, dream ... */ });
public static void startDream(Dream md) { md.dream(); }
public static boolean startDream(AugmentedDream ad) {
ad.dream(&Ruin lambdas&);
public static boolean startDream(ThisIsNightmare hahaha) {
hahaha.sufferMyKid(&Hahaha you're going to hell&, 2000);
interface Dream {
void dream();
interface AugmentedDream {
void dream(String dreamName);
interface ThisIsNightmare {
void sufferMyKid(String dreamName, int duration);
代码内容:一个类有三个方法,开始做美梦,还有另外一个方法,是做噩梦的。
该如何看待、使用、欣赏以及理解(Lamdba)?
通过注释,我们可以很简单的明白一些事实:
通过每个方法的直接调用我们知道使用哪个接口;
通过每个调用我们知道哪些方法被实现了;
就算没有解释,代码一样简洁易读;
开发人员不需要理解代码的每一个细节;
初级开发人员加入团队并没有迷失在代码荒漠中。
那接下来是否应该讲讲怎样使用Lambda了?不,如果这样的话就跟前文相抵触了。
的确,对于绝大部分不善于编程的人来说,这些代码并不那么易读了。你可能会反驳:只要你看看下面的注释就明白所有(代码)了。是不是这样呢?可能在某些情况下,的确如此,但是生活可不像你开着法拉利在空荡的高速公路上一样畅通无阻。为什么会这样?
谁最不喜欢Lambda?
成为一个Lambda十分的艰难,把难读且难用的Lambda当作一个人的话,问问他这些问题:你有没有一些简单的项目是所有的代码都写在一个类里面的?你有没有维护过几个星期以前甚至是几个月以前的代码?你没有写过代码了吗?
在现实生活中,你用Maven或者Gradle来管理依赖。你也基本上是用IDE来开发你的应用吧?通过这两件事你可能理解Lambda的难用了。
日常工作中的Lambda和依赖管理
开发中,你一般都没有(去找)你用的库的源代码。当你用了Lamdba这样简洁的语法的时候,你就必须通过浏览API文档来使用这些库了。当你不能理解你使用的库的时候,你可能需要花几个小时去理解库函数做了什么。而Lamdba简洁的语法对你理解这些代码没有任何帮助。
当Lambda没有IDE
我们都习惯使用IDE中Ctrl +点击的快捷方式帮我们找源代码的声明、实现。用的很爽是吧?别以为这是IDE必须做的,假如没有IDE,你要在你的服务器上用 vi 来写你的java代码了(vi?这是什么时代的东西了:)),到时候你会用不一样的态度来看待IDE了。
在“不懂就GOOGLE的时代”,你会说让你理解这些代码不是什么难事。以程序员的经验来说,确实如此。如果你的Java足够好的话,你甚至可以通过在虚拟机里查看、编写字节码来理解程序。但是当你正着手一个新项目,而且因为你的上司看到你找一个bug找了几个星期没找出来的时候,你就会焦虑起来,事情也会变得棘手了。
Lambda有个矛盾就是它的语法写起来简单但是却难以理解,除非你对它十分熟悉。所以,如果你要快速弄清楚代码做了什么,即使它简化了Java的语法,但是lambda让代码变得抽象,难以迅速的理解。
Lambda——我依然爱你
就算这文章有损lambda表达式在Java8变革中的声誉,我还是爱他们。事实上,如果你已经习惯了他们,他们真的很好用,主要用于快速处理列表中每个元素的值。
对于复杂的算法也许有些开发者会认为以上的观点不正确。 Java的从来就不是一个函数式语言,但现在Lambda却成为了Java的核心。个人认为事事无绝对的好坏,我们不可能只保留Lambda的好处又让它变得易读吧?上下文是很重要的,你不会开着载着水泥的卡车跑去超市就为了买瓶牛奶吧?
我不确定我是否是唯一一个对Java8引入lambda抱有一百分感兴趣的人,你可以留下您的意见,无论你是否同意我的看法。
最后,我想给你留下一个小小的Lambda表达式(作为礼物)……
readers.stream() .filter(reader -& reader.isNinja()) .forEach(reader -& reader.cheers());
原文链接:
- 译文链接: [ 转载请保留原文出处、译者和译文链接。]
关于作者:
(新浪微博:)
alert(\"网站已停用\");
关于ImportNew
ImportNew 专注于 Java 技术分享。于日 11:11正式上线。是的,这是一个很特别的时刻 :)
ImportNew 由两个 Java 关键字 import 和 new 组成,意指:Java 开发者学习新知识的网站。 import 可认为是学习和吸收, new 则可认为是新知识、新技术圈子和新朋友……
新浪微博:
推荐微信号
反馈建议:ImportNew.
广告与商务合作QQ:
– 好的话题、有启发的回复、值得信赖的圈子
– 写了文章?看干货?去头条!
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 活跃 & 专业的翻译小组
– 国内外的精选博客文章
– UI,网页,交互和用户体验
– JavaScript, HTML5, CSS
– 专注Android技术分享
– 专注iOS技术分享
– 专注Java技术分享
– 专注Python技术分享
& 2018 ImportNew如何避免 Lambda 表达式毁了你的世界 - 编程语言 - ITeye资讯
相关知识库:
代码与野兽
在Java8中,无疑是最受关注的。但是自这个新闻被公布的几个月以来,我还没见到过有哪些项目是Lambda起着关键作用的。
确实,众人所知的Lambda表达式一直被学术界、研讨会和社区宣扬对java是百利而无一害。但是经过时间的考验后,Lamdba是否依然像培根芝士汉堡那样美妙而又让人称赞呢?你又是否会因为日常工作需要用到它而去寻找更多关于Lamdba的资料呢?
让我们马上来看看奇妙的Lambda表达式在我们的代码中的运用:
public class RuinLambdas {
public static void main(String[] args) {
startDream(new Dream() {
@Override public void dream() {
// Dream boy, dream ...
startDream(new AugmentedDream() {
@Override public void dream(String dreamName) {
// Dream boy, dream ...
// Less easy
startDream(() -& { /* Dream boy, dream ... */ });
// And now kid ? ...
startDream((dreamName) -& { /* Dream boy, dream ... */ });
// Do you see which one it is directly by reading this ? ...
startDream((dreamName, duration) -& { /* Dream boy, dream ... */ });
public static void startDream(Dream md) { md.dream(); }
public static boolean startDream(AugmentedDream ad) {
ad.dream("Ruin lambdas");
public static boolean startDream(ThisIsNightmare hahaha) {
hahaha.sufferMyKid("Hahaha you're going to hell", 2000);
interface Dream {
void dream();
interface AugmentedDream {
void dream(String dreamName);
interface ThisIsNightmare {
void sufferMyKid(String dreamName, int duration);
代码内容:一个类有三个方法,开始做美梦,还有另外一个方法,是做噩梦的。
该如何看待、使用、欣赏以及理解(Lamdba)?
通过注释,我们可以很简单的明白一些事实:
通过每个方法的直接调用我们知道使用哪个接口;
通过每个调用我们知道哪些方法被实现了;
就算没有解释,代码一样简洁易读;
开发人员不需要理解代码的每一个细节;
初级开发人员加入团队并没有迷失在代码荒漠中。
那接下来是否应该讲讲怎样使用Lambda了?不,如果这样的话就跟前文相抵触了。
的确,对于绝大部分不善于编程的人来说,这些代码并不那么易读了。你可能会反驳:只要你看看下面的注释就明白所有(代码)了。是不是这样呢?可能在某些情况下,的确如此,但是生活可不像你开着法拉利在空荡的高速公路上一样畅通无阻。为什么会这样?
谁最不喜欢Lambda?
成为一个Lambda十分的艰难,把难读且难用的Lambda当作一个人的话,问问他这些问题:你有没有一些简单的项目是所有的代码都写在一个类里面的?你有没有维护过几个星期以前甚至是几个月以前的代码?你没有写过代码了吗?
在现实生活中,你用Maven或者Gradle来管理依赖。你也基本上是用IDE来开发你的应用吧?通过这两件事你可能理解Lambda的难用了。
日常工作中的Lambda和依赖管理
开发中,你一般都没有(去找)你用的库的源代码。当你用了Lamdba这样简洁的语法的时候,你就必须通过浏览API文档来使用这些库了。当你不能理解你使用的库的时候,你可能需要花几个小时去理解库函数做了什么。而Lamdba简洁的语法对你理解这些代码没有任何帮助。
当Lambda没有IDE
我们都习惯使用IDE中Ctrl +点击的快捷方式帮我们找源代码的声明、实现。用的很爽是吧?别以为这是IDE必须做的,假如没有IDE,你要在你的服务器上用 vi 来写你的java代码了(vi?这是什么时代的东西了:)),到时候你会用不一样的态度来看待IDE了。
在“不懂就GOOGLE的时代”,你会说让你理解这些代码不是什么难事。以程序员的经验来说,确实如此。如果你的Java足够好的话,你甚至可以通过在虚拟机里查看、编写字节码来理解程序。但是当你正着手一个新项目,而且因为你的上司看到你找一个bug找了几个星期没找出来的时候,你就会焦虑起来,事情也会变得棘手了。
Lambda有个矛盾就是它的语法写起来简单但是却难以理解,除非你对它十分熟悉。所以,如果你要快速弄清楚代码做了什么,即使它简化了Java的语法,但是lambda让代码变得抽象,难以迅速的理解。
Lambda——我依然爱你
就算这文章有损lambda表达式在Java8变革中的声誉,我还是爱它们。事实上,如果你已经习惯了它们,它们真的很好用,主要用于快速处理列表中每个元素的值。
对于复杂的算法也许有些开发者会认为以上的观点不正确。 Java的从来就不是一个函数式语言,但现在Lambda却成为了Java的核心。个人认为事事无绝对的好坏,我们不可能只保留Lambda的好处又让它变得易读吧?上下文是很重要的,你不会开着载着水泥的卡车跑去超市就为了买瓶牛奶吧?
我不确定我是否是唯一一个对Java8引入lambda抱有一百分感兴趣的人,你可以留下您的意见,无论你是否同意我的看法。
最后,我想给你留下一个小小的Lambda表达式(作为礼物)……
readers.stream() .filter(reader -& reader.isNinja()) .forEach(reader -& reader.cheers());
原文链接:
译文链接:
接受能力问题吧,一时间你家冲进来一个外星人跟你称兄道弟住下了,有些人可能会觉得很高兴,有些人需要时间接受,有些人可能会把他撵走。
真心觉得看起来很费劲
iOracleSun 写道绝对是恶梦。绝对是一场噩梦·
呵呵,我是.net 和 Java 都做,在.net 没引入 Lambda 时,我也觉得 Lambda 太 难懂了,可是当我用的多了,其实才了解 Lambda 的好处。我了解的 Lambda 其实是更高一层的抽象,没有lambda,我们要在一个列表中查找 几个 数字大于3 的数字,那么肯定是 for 循环去做(这就是程序员思维啊)但是 lambda 是让你从 人的思维来 考量:首先你给它 要筛选的那些人,再给它一个标准,然后 它就会 将结果给你,这就是 人的思维,不需要知道什么 for, if 这些。说白了,就是 一种 语义编程。
zoozooll 写道yixiandave 写道Lambda应用领域没有想象中那么广阔,因为你依然需要事先定义好一个函数式接口也就是说我们依然没办法在不依赖接口的前提下搞定类似
(int a,int b)-&a+b
这种的简单函数,更没办法像Groovy中的Clouse语法块可以被轻松存入一个属性并调用。另外,Lambda内引用的外部变量被隐式的定义为了final也大大限制了其应用范围,而且这一点让我很费解,为了节省一个final关键字导致的代码歧义是难以想象的,要么就允许变化。至于5楼说的我也比较认同,default方法的定义颠覆了Interface的定义,我想是开发人员尝试以这种方式实现java的多继承,但是真的没有更好的方案了吗不说这么多的东西了,我倒觉得java8这些特征多少偏离了原本定义的东西,那么造成的变化可能会:1. 接口加个default关键字就可以实现一个有实体的方法,那么会有很多人尝试多重继承;2. (int a,int b)-&a+b& 对类型的不限制,确实很大程度上改变了java强类型原则。强类型语言的一个特点是ide debug方便3.& Lambda内引用的外部变量被隐式的定义为了final也大大限制了其应用范围。如果IDE没有加入相应的功能,我想到时候编译error层出不穷。不过新语言这个东西哎,要大规模应用时间还远的了。有一些人自以为他们项目是java8的,其实他们所有语法都是7以下,甚至6以下,只不过用了一个jdk8而下。这种新东西要用得心应手,甚至成为一种思想,有一段路呢。要想象《java编程思想》这本书是在java出来多久后才出版的。不过我觉得这种java8推广开来,《java编程思想》都有点过时的味道了。1. java8的default与多继承完全是两回事,首先你不能同时继承自两个包含了相同default方法的接口,其次default方法是不能在实现类中用super调用的。Java8引入default的作用是:假如你公开了一个接口,而别人已经基于这个接口实现了一些东西。现在你给这个接口加入一个新方法,在java8之前所有基于这个接口的实现类都会出错,也就是别人无法直接升级到最新版了。在java8里你可以给你的新方法定义一个default的空实现,而保证别人能顺利升级。2. Java8的Lambda是限制类型的,只不过不需要在使用Lambda的位置显式写出来而已。楼上说的“不能在不依赖接口的前提下直接这样用”3. Lambda引入了“事实final”这个概念,至少IDEA在13.0 EAP(去年底)时就已经能正确检查出来了。
yixiandave 写道Lambda应用领域没有想象中那么广阔,因为你依然需要事先定义好一个函数式接口也就是说我们依然没办法在不依赖接口的前提下搞定类似
(int a,int b)-&a+b
这种的简单函数,更没办法像Groovy中的Clouse语法块可以被轻松存入一个属性并调用。另外,Lambda内引用的外部变量被隐式的定义为了final也大大限制了其应用范围,而且这一点让我很费解,为了节省一个final关键字导致的代码歧义是难以想象的,要么就允许变化。至于5楼说的我也比较认同,default方法的定义颠覆了Interface的定义,我想是开发人员尝试以这种方式实现java的多继承,但是真的没有更好的方案了吗不说这么多的东西了,我倒觉得java8这些特征多少偏离了原本定义的东西,那么造成的变化可能会:1. 接口加个default关键字就可以实现一个有实体的方法,那么会有很多人尝试多重继承;2. (int a,int b)-&a+b& 对类型的不限制,确实很大程度上改变了java强类型原则。强类型语言的一个特点是ide debug方便3.& Lambda内引用的外部变量被隐式的定义为了final也大大限制了其应用范围。如果IDE没有加入相应的功能,我想到时候编译error层出不穷。不过新语言这个东西哎,要大规模应用时间还远的了。有一些人自以为他们项目是java8的,其实他们所有语法都是7以下,甚至6以下,只不过用了一个jdk8而下。这种新东西要用得心应手,甚至成为一种思想,有一段路呢。要想象《java编程思想》这本书是在java出来多久后才出版的。不过我觉得这种java8推广开来,《java编程思想》都有点过时的味道了。
java 还是应该要坚持简单路线;
提供了特性,用不用,看自己喜好了!
sayji 写道icefishc 写道主流语言中恐怕只有c和sql不支持这东西了。 完全不理解为啥还有这么多人视它为洪水猛兽。 因为它不是命令式语言的特点,这是从函数式语言而来的东西,有人会有洁癖。不过我倒觉得,某些程度上C的函数指针,类似于上面的东西。这个Lambda在某些程度来说也许是补充了由于java去掉了函数指针而造成的功能缺陷。当然这个只是个人看法。
Lambda应用领域没有想象中那么广阔,因为你依然需要事先定义好一个函数式接口也就是说我们依然没办法在不依赖接口的前提下搞定类似
(int a,int b)-&a+b
这种的简单函数,更没办法像Groovy中的Clouse语法块可以被轻松存入一个属性并调用。另外,Lambda内引用的外部变量被隐式的定义为了final也大大限制了其应用范围,而且这一点让我很费解,为了节省一个final关键字导致的代码歧义是难以想象的,要么就允许变化。至于5楼说的我也比较认同,default方法的定义颠覆了Interface的定义,我想是开发人员尝试以这种方式实现java的多继承,但是真的没有更好的方案了吗
Lambda没什么。不过让人不爽的是,接口中有实现方法,defualt方法就不说了,为什么java8的接口可以有静态的已实现的方法?这不是违反了接口的抽象性,破坏了类-抽象类-接口这一整套抽象层次吗?如果说函数式接口是java8良好的扩展,那default那是剑走偏锋的小破坏,那接口中可定义已实现的静态方法,那就是将接口原有的概念一击即溃。
icefishc 写道主流语言中恐怕只有c和sql不支持这东西了。 完全不理解为啥还有这么多人视它为洪水猛兽。 因为它不是命令式语言的特点,这是从函数式语言而来的东西,有人会有洁癖。
写起来很爽,维护起来可能没以前爽了,要看写的人的规范。
主流语言中恐怕只有c和sql不支持这东西了。 完全不理解为啥还有这么多人视它为洪水猛兽。
绝对是恶梦。
相关资源推荐

我要回帖

更多关于 lambda 运算符 的文章

 

随机推荐