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;
}
});
分享到:
相关推荐
在本文中,我们将深入探讨Lambda表达式的核心概念、语法以及它在实际开发中的应用。 一、Lambda表达式基础 1. **什么是Lambda表达式?** Lambda表达式是一种新的语法结构,它可以被看作是一段没有名字的函数。...
在本资料"2_Lambda表达式.zip"中,我们可能将深入学习Lambda表达式的概念、语法以及在实际开发中的应用。 Lambda表达式的语法结构简洁明了,通常由三部分组成:参数列表、箭头符号(->)和函数体。例如,一个简单的...
Lambda表达式通常用于LINQ(Language Integrated Query)查询,它允许程序员使用类似SQL的语法在内存中的数据集上进行操作。然而,在某些情况下,我们需要将这些表达式转换为实际的SQL语句,以便在数据库中执行。...
1. **Lambda表达式的基本语法** Lambda表达式的一般形式是`param -> expression`,其中`param`代表参数列表,`->`是lambda运算符,`expression`是函数体。对于没有参数的lambda,可以省略参数的括号;如果只有一个...
3. **方法引用**:当Lambda体完全等同于某个已存在的方法时,可以使用方法引用来替代Lambda表达式,如 `Arrays.sort(list, Comparator.comparingInt(Integer::intValue))`。 4. **构造器引用**:同样,Lambda 表达式...
lambda 表达式的基本语法是:`lambda arguments : expression` 在 C# 中,lambda 表达式可以用来定义委托、事件处理程序和 LINQ 查询中的表达式。例如,在上面的代码中,lambda 表达式用来定义一个 LINQ 查询,用于...
下面我们将详细探讨lambda表达式的语法和用法。 1. **基础语法** Lambda表达式的基本形式如下: ```cpp [capture-list] (parameter-list) -> return-type { body } ``` - `[capture-list]`:捕获列表,用于...
Lambda表达式是Java 8中的一种语法糖,它允许开发者以更简洁的方式定义无状态、无副作用的函数。在描述中提到的代码示例中,对比了使用匿名类和Lambda表达式实现相同功能的方法。 首先,让我们看看匿名类的使用。在...
Java8发布到现在至少3年了,但是对Lambda表达式不熟悉、看不懂、不会用的现象非常常见。 即使是升级到JDK1.8了,但是很多开发者依然是停留在1.8之前的开发方式,使用的也是非常老旧和过时的API,遇到函数式接口也是...
Lambda表达式的语法形式为`(parameters) -> expression`或`(parameters) -> { statements }`。其中,`parameters`是输入参数(如果无参数,可以省略括号),`->`是箭头符号,`expression`或`{ statements }`是...
接下来,我们将详细解读 Lambda 表达式的概念、语法以及如何在实际编程中应用。 Lambda 表达式的概念: Lambda 表达式,也被称作闭包,它使得 Java 语言变得更加灵活和具有函数式编程特性。在 Java 8 之前,如果要...
Lambda表达式的基本语法格式如下: ```java (parameters) -> expression 或 (parameters) -> { statements; } ``` 这里的`parameters`代表参数列表,可以有零个或多个参数,参数之间用逗号分隔。`->`被称为箭头...
首先,我们要理解`lambda`表达式的语法。在Python中,`lambda`关键字后面跟着函数参数,然后是一个冒号和一个表达式。这个表达式的结果就是`lambda`函数的返回值。例如,`lambda x: x + 1`创建了一个接受一个参数`x`...
Lambda表达式的语法形式如下: `(parameters) -> expression` 或 `(parameters) -> { statements }` 例如,一个接受两个整数并返回它们之和的Lambda表达式可以写作 `(int a, int b) -> a + b`。 在JVM层面上,...
Lambda表达式的语法结构如下: ```csharp 参数列表 => 表达式 或 方法体 ``` 这里的参数列表可以是空的,也可以包含一个或多个参数,用逗号分隔。箭头`=>`表示“根据以下规则进行计算”。表达式部分是一个简单的计算...
Lambda表达式的语法格式如下: `(parameters) -> expression` 这里的`parameters`代表参数列表,如果参数只有一个且类型可以推断,括号可以省略;`->`是箭头符号,表示参数列表和函数体的分隔;`expression`是函数...
Lambda表达式是一种匿名函数的概念,它在程序设计中提供了高效且简洁的语法结构,主要用于简化代码编写过程中的复杂度。这种表达式允许开发者使用一种类似函数式编程的语言特性,从而减少冗余的代码量。Lambda表达式...
Lambda 表达式的语法: * (input parameters) => expression * (input parameters) => { statement; } Lambda 表达式的特点: * 使用 Lambda 运算符 => * 可以包含表达式和语句 * 可以用于创建委托或表达式树...
Lambda表达式的基本语法是`参数列表 => 表达式`,其中参数列表可以为空,表达式则表示方法体。例如,上面的`MyDelegate`可以用Lambda表达式来创建实例: ```csharp MyDelegate lambdaDel = (x, y) => x + y; // ...
1、Lambda表达式概述:了解Lambda表达式的定义、语法和变量捕获机制,以及为什么要在Java中引入Lambda表达式来支持函数式编程。 2、函数式接口与Lambda表达式:学习如何使用Lambda表达式与不同类型的函数式接口进行...