惊叹于λ表达式的简洁和优美,在这里也分享一下使用心得.
目标程序:使一个容器内的String类型的数据
1.长度不能超过5
2.全部变成大写
注意:这份代码导入了外部扩展的jar包,是google的guava包,需要百度下载.
一般的程序代码:
package s0222函数式编程; import java.util.Collection; import java.util.List; import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.collect.Collections2; import com.google.common.collect.Lists; public class Main { public static void main(String [] args){ //创建容器,存放String类型数据 List<String > list2=Lists.newArrayList("babkjsdhf","kik","dfdfdkd"); //函数f1,控制容器内元素长度小于等于5,用了匿名内部类 Function<String,String> f1=new Function<String,String>() { public String apply(String input) {return input.length()>5?input.substring(0, 5):input;} }; //函数f2,将元素转换成大写,用了匿名内部类 Function<String,String> f2=new Function<String,String>() { public String apply(String input) {return input.toUpperCase();} }; //组合函数f1,和函数f2 Function<String,String> f=Functions.compose(f1, f2); //函数式编程 Collection<String> list3= Collections2.transform(list2, f); //增强for循环,输出容器内每个元素 for(String temp:list3) System.out.println(temp); }}
运用了λ表达式的代码:
package s0222函数式编程; import java.util.Collection; import java.util.List; import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.collect.Collections2; import com.google.common.collect.Lists; public class Main { public static void main(String [] args){ //创建容器,存放String类型的数据 List<String > list2=Lists.newArrayList("babkjsdhf","kik","dfdfdkd"); //lambda表达式,函数f1,控制容器内元素长度小于等于5 Function<String,String> f1=(input)->input.length()>5?input.substring(0, 5):input; //lambda表达式,函数f1,将元素转换成大写 Function<String,String> f2=(input)->input.toUpperCase(); //组合函数f1,和函数f2 Function<String,String> f=Functions.compose(f1, f2); //函数式编程 Collection<String> list3= Collections2.transform(list2, f); //输出每个元素 list3.forEach(name->System.out.println(name) ); } }
我们将核心代码部分抽取出来,去掉注释,对比会更明显.
1.普通代码
List<String > list2=Lists.newArrayList("babkjsdhf","kik","dfdfdkd"); Function<String,String> f1=new Function<String,String>() { public String apply(String input) {return input.length()>5?input.substring(0, 5):input;} }; Function<String,String> f2=new Function<String,String>() { public String apply(String input) {return input.toUpperCase();} }; Function<String,String> f=Functions.compose(f1, f2); Collection<String> list3= Collections2.transform(list2, f); for(String temp:list3) System.out.println(temp);
2.运用λ表达式
List<String > list2=Lists.newArrayList("babkjsdhf","kik","dfdfdkd"); Function<String,String> f1=(input)->input.length()>5?input.substring(0, 5):input; Function<String,String> f2=(input)->input.toUpperCase(); Function<String,String> f=Functions.compose(f1, f2); Collection<String> list3= Collections2.transform(list2, f); list3.forEach(name->System.out.println(name) );
可以看到,运用λ表达式可以极大的简化代码,增强可读性!!
λ表达式可以简化1.只有一个方法的匿名内部类
2.遍历数组
另外,监听器对象也能运用lambda表达式
button.addActionListener((e) -> System.out.println("Hello") );
3.lambda表达式的形式
相关推荐
例如,一个函数可以表示为λx.x+1,其中λ表示这是一个lambda表达式,x是参数,而x+1是函数体。这种表示方法允许函数本身成为运算对象,从而支持高阶函数的概念,即函数可以接受其他函数作为参数,或返回函数作为...
接着选择三个加权函数,分别在\(z=\lambda/8\)、\(z=\lambda/4\)以及\(z=0\)处对等式两边求内积,最终可以得到一个矩阵形式的方程组: \[ \begin{bmatrix} Z_{11} & Z_{12} & Z_{13} \\ Z_{21} & Z_{22} & Z_{23} \...
对于某些特定类型的微分方程,可以通过求解其在某一点处的泰勒展开式(幂级数解)来获得解的表达式。这种方法特别适用于那些无法通过初等函数直接求解的情况。例如,对于形如\[y'' + xy = 0\]这样的方程,可以通过...
7. **闭包和 lambda 函数**: 这些是函数式编程的重要概念,允许创建不依赖于外部环境的函数,或创建匿名函数用于一次性计算。 8. **动态求值与静态求值**: 动态求值是在表达式实际执行时才确定其值,而静态求值则在...
- **Lambda表达式**:简化函数式编程,支持高阶函数。 - **模块系统**:Jigsaw项目引入,提高代码组织和依赖管理。 - **类型推断**:编译器自动推断局部变量的类型。 - **并发增强**:如Fork/Join框架,提升多...
1. 对于双曲型方程,当判别式 \( D = b^2 - 4ac > 0 \) 时,方程有两个不同的实根 \( \lambda_1, \lambda_2 \)。此时解可以表示为 \( u(x, t) = F(y) + G(y) \),其中 \( y = x - ct \),\( F \) 和 \( G \) 是关于 ...
通过这种方式,学生需要学会如何区分一元一次方程和一元二次方程。 ### 二、一元二次方程的解法 一元二次方程的解法主要包括以下几种方法: **1. 因式分解法**:适用于方程可以因式分解的情况,即把方程写成两个...
- **解**:写出波动方程的标准式 \(y = 0.1\sin(10\pi t - 0.1\pi x)\)。 - **波形图**:根据波动方程画出特定时刻的波形图。 - **质点的振动规律**:分析特定位置质点的振动方程,并绘制振动曲线。 **例3**:一...
- **lambda 表达式**:使用匿名函数来定义判断条件。 - **列表推导式**:通过列表推导式来生成素数列表。 - **map 函数**:使用 map 函数来应用一个函数到序列的每一个元素上。 - **all 函数**:all 函数用于判断...
- **Lambda表达式**:介绍了匿名函数(lambda函数)的概念。 - **节段**:讨论了函数的部分应用。 - **章节小结**:总结了本章内容。 - **练习题**:提供了相关的习题供读者练习。 ##### 第5章:列表推导 - **生成...
3. **高阶函数**:Julia提供了丰富的高阶函数,如map、filter和reduce等,方便进行函数式编程。 4. **多重-dispatch**:Julia的核心特性之一是多重调度,即同名函数可以根据传入参数的类型调用不同的实现,增强了...
7. **函数和序列**:`Lambda` 用于创建匿名函数,`sequences` 模块则提供了序列相关的运算。 8. **物理和几何**:`sympy.physics` 和 `sympy.geometry` 分别提供了物理学和几何学的计算工具,如力的分析、波的传播...
首先,Java 8引入了许多新特性,比如lambda表达式、方法引用来简化代码,Stream API用于处理集合数据,以及Date和Time API的改进,使得日期和时间操作更为便捷。然而,在Android 3D应用开发中,这些特性可能并不直接...
6. **抽象行列式的计算**:当行列式中的元素以函数形式给出时,通常需要利用数学归纳法来求解。 #### 余子式与代数余子式 - **余子式**:去掉矩阵\( A \)的第\( i \)行和第\( j \)列后剩下的\( (n-1) \times (n-1)...
10. **解答题解题步骤**:解答题通常需要按照一定的逻辑步骤进行,包括但不限于:理解题目条件,应用三角函数的性质和公式,化简表达式,代入条件求解,验证答案的合理性。 总结来说,这个高二数学暑假作业主要涵盖...
4. **函数与脚本**:Matlab中的函数定义,包括匿名函数(lambda函数)和子函数,以及主脚本的编写和调用。 5. **绘图功能**:Matlab有强大的绘图功能,可以绘制2D和3D图形,包括线图、散点图、柱状图、饼图、等高...
此外,MATLAB支持函数嵌套和匿名函数(lambda函数),方便进行函数式编程。 三、MATLAB数值计算 MATLAB在数值计算方面表现出色,拥有大量的内置函数,包括线性代数、微积分、概率统计等。例如,可以使用`linalg`...
- **匿名函数与局部变量**:学习使用lambda函数(匿名函数)和理解函数内部的局部变量作用域。 3. **数组与矩阵操作**: - **数组创建**:学习如何创建不同类型的数组,如一维数组、二维数组、多维数组和稀疏矩阵...