`
javatar
  • 浏览: 1701102 次
  • 性别: Icon_minigender_1
  • 来自: 杭州699号
社区版块
存档分类
最新评论

lambda表达式语法思考

    博客分类:
  • HTTL
阅读更多
CommonTemplate(http://www.commontemplate.org)最近实现了简单的lambda表达式功能,但操作符语法未定,
可选方案:
1.仿Python,采用“lambda”
如:list[lambda i : i > 0]
符合标准lambda表达式定义格式,但太复杂,不简洁。

2.仿JavaFX,采用“|”
如:list[i | i > 0]
但因为“|”已作为“按位或”运算符,重载操作符优先级可能不对,也易引起歧义。

3.仿C#,采用“=>”
如:list[i => i > 0]

4.隐式变量,也就是规定死命名,假设用“index"
如:list[index > 0]

另外,还需要考虑多个参数的情况:
如:list[item,index | item ~ "[0-9]+" && index > 3]
或:list[item,index => item ~ "[0-9]+" && index > 3]

哪种更合理?最符合思维习惯?
或者还有其它方案?

还有一个问题是,现有方案,与lambda表达式功能重叠,如:

现在的方案:
list[1]
list[-1]
list[1..2]
list["value"] // 假设list中放的String对象
list[name="james",role="admin"] // 假设list中放的User对象

用lambda表达式一一替换上面的方案:
(假设采用第4种方案,隐含变量:item,index,size)
list[index == 1]
list[index == size - 1]
list[index >= 1 && index <= 2]
list[item == "value"]
list[item.name == "james" && item.role="admin"]

当然,lambda表达式可以表示更多情况,因为表达式的逻辑完备性很强。
但原方案更直观,简洁。
两者都保留?

更深一步的问题是,现在的lambda表达式表达式是超简化的,
是否应该实现内递归推演?
也就是先前这篇blog所讲的:
http://javatar.iteye.com/blog/137037

如果你不太理解lambda表达式,你可以把它简单的看成匿名的回调函数,
而上面讨论的是一个过滤器功能的回调函数,可以类比:File.listFiles(new FileFilter())
list[lambda item,index,size : index > 0]
相当于list回调了一个匿名函数,参数列表为item,index,size,
返回值为index > 0,list根据返回值确定要不要接收这个项。
Java等价写法:
subList = list.sub(new Filter() {
   public boolean filter(Object item, int index, int size) {
       return index > 0;
   }
});
分享到:
评论

相关推荐

    Java8的lambda表达式

    在本文中,我们将深入探讨Lambda表达式的核心概念、语法以及它在实际开发中的应用。 一、Lambda表达式基础 1. **什么是Lambda表达式?** Lambda表达式是一种新的语法结构,它可以被看作是一段没有名字的函数。...

    2_Lambda表达式.zip

    在本资料"2_Lambda表达式.zip"中,我们可能将深入学习Lambda表达式的概念、语法以及在实际开发中的应用。 Lambda表达式的语法结构简洁明了,通常由三部分组成:参数列表、箭头符号(-&gt;)和函数体。例如,一个简单的...

    C#将Lambda表达式转成Sql语句

    Lambda表达式通常用于LINQ(Language Integrated Query)查询,它允许程序员使用类似SQL的语法在内存中的数据集上进行操作。然而,在某些情况下,我们需要将这些表达式转换为实际的SQL语句,以便在数据库中执行。...

    Java 8 lambda表达式

    1. **Lambda表达式的基本语法** Lambda表达式的一般形式是`param -&gt; expression`,其中`param`代表参数列表,`-&gt;`是lambda运算符,`expression`是函数体。对于没有参数的lambda,可以省略参数的括号;如果只有一个...

    java8 lambda表达式学习总结

    3. **方法引用**:当Lambda体完全等同于某个已存在的方法时,可以使用方法引用来替代Lambda表达式,如 `Arrays.sort(list, Comparator.comparingInt(Integer::intValue))`。 4. **构造器引用**:同样,Lambda 表达式...

    lambda表达式和递归算法

    lambda 表达式的基本语法是:`lambda arguments : expression` 在 C# 中,lambda 表达式可以用来定义委托、事件处理程序和 LINQ 查询中的表达式。例如,在上面的代码中,lambda 表达式用来定义一个 LINQ 查询,用于...

    C++ 11 lambda 表达式

    下面我们将详细探讨lambda表达式的语法和用法。 1. **基础语法** Lambda表达式的基本形式如下: ```cpp [capture-list] (parameter-list) -&gt; return-type { body } ``` - `[capture-list]`:捕获列表,用于...

    JavaLambda表达式和匿名类.pdf

    Lambda表达式是Java 8中的一种语法糖,它允许开发者以更简洁的方式定义无状态、无副作用的函数。在描述中提到的代码示例中,对比了使用匿名类和Lambda表达式实现相同功能的方法。 首先,让我们看看匿名类的使用。在...

    05.第五节-lambda表达式语法的介绍.mp4

    Java8发布到现在至少3年了,但是对Lambda表达式不熟悉、看不懂、不会用的现象非常常见。 即使是升级到JDK1.8了,但是很多开发者依然是停留在1.8之前的开发方式,使用的也是非常老旧和过时的API,遇到函数式接口也是...

    精通lambda表达式: java多核编程

    Lambda表达式的语法形式为`(parameters) -&gt; expression`或`(parameters) -&gt; { statements }`。其中,`parameters`是输入参数(如果无参数,可以省略括号),`-&gt;`是箭头符号,`expression`或`{ statements }`是...

    jdk1.8 Lambda表达式

    接下来,我们将详细解读 Lambda 表达式的概念、语法以及如何在实际编程中应用。 Lambda 表达式的概念: Lambda 表达式,也被称作闭包,它使得 Java 语言变得更加灵活和具有函数式编程特性。在 Java 8 之前,如果要...

    Lambda表达式的例子

    Lambda表达式的基本语法格式如下: ```java (parameters) -&gt; expression 或 (parameters) -&gt; { statements; } ``` 这里的`parameters`代表参数列表,可以有零个或多个参数,参数之间用逗号分隔。`-&gt;`被称为箭头...

    将字符串转换为lambda表达式

    首先,我们要理解`lambda`表达式的语法。在Python中,`lambda`关键字后面跟着函数参数,然后是一个冒号和一个表达式。这个表达式的结果就是`lambda`函数的返回值。例如,`lambda x: x + 1`创建了一个接受一个参数`x`...

    Java lambda表达式和JVM字节码功能详解.pdf

    Lambda表达式的语法形式如下: `(parameters) -&gt; expression` 或 `(parameters) -&gt; { statements }` 例如,一个接受两个整数并返回它们之和的Lambda表达式可以写作 `(int a, int b) -&gt; a + b`。 在JVM层面上,...

    C# Lambda表达式

    Lambda表达式的语法结构如下: ```csharp 参数列表 =&gt; 表达式 或 方法体 ``` 这里的参数列表可以是空的,也可以包含一个或多个参数,用逗号分隔。箭头`=&gt;`表示“根据以下规则进行计算”。表达式部分是一个简单的计算...

    Lambda表达式测试demo

    Lambda表达式的语法格式如下: `(parameters) -&gt; expression` 这里的`parameters`代表参数列表,如果参数只有一个且类型可以推断,括号可以省略;`-&gt;`是箭头符号,表示参数列表和函数体的分隔;`expression`是函数...

    Lambda表达式总结

    Lambda表达式是一种匿名函数的概念,它在程序设计中提供了高效且简洁的语法结构,主要用于简化代码编写过程中的复杂度。这种表达式允许开发者使用一种类似函数式编程的语言特性,从而减少冗余的代码量。Lambda表达式...

    Lambda表达式.pdf

    Lambda 表达式的语法: * (input parameters) =&gt; expression * (input parameters) =&gt; { statement; } Lambda 表达式的特点: * 使用 Lambda 运算符 =&gt; * 可以包含表达式和语句 * 可以用于创建委托或表达式树...

    委托、事件、Lambda表达式Demo

    Lambda表达式的基本语法是`参数列表 =&gt; 表达式`,其中参数列表可以为空,表达式则表示方法体。例如,上面的`MyDelegate`可以用Lambda表达式来创建实例: ```csharp MyDelegate lambdaDel = (x, y) =&gt; x + y; // ...

    Java的lambda表达式讲解代码(各种lambda表达式使用方式:无参、一个参数、多参数、简化形式...)

    1、Lambda表达式概述:了解Lambda表达式的定义、语法和变量捕获机制,以及为什么要在Java中引入Lambda表达式来支持函数式编程。 2、函数式接口与Lambda表达式:学习如何使用Lambda表达式与不同类型的函数式接口进行...

Global site tag (gtag.js) - Google Analytics