`

lambda表达式和函数式方程

    博客分类:
  • java
 
阅读更多

惊叹于λ表达式的简洁和优美,在这里也分享一下使用心得.

 

目标程序:使一个容器内的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表达式的形式
    (参数) ->{表达式}     参数可以为空
示例: 3.1test.addActionListener( e->{System.out.println();} );
         3.2 new Thread(   lambda表达式  ).start(); 扩展开就是如下形式
               new Thread(
                 ()->{  System.out.println("1");System.out.println("2");System.out.println("3");}  
                          ).start();
分享到:
评论

相关推荐

    A short introduction to the Lambda Calculus

    例如,一个函数可以表示为λ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\]这样的方程,可以通过...

    超级表达式计算.rar

    7. **闭包和 lambda 函数**: 这些是函数式编程的重要概念,允许创建不依赖于外部环境的函数,或创建匿名函数用于一次性计算。 8. **动态求值与静态求值**: 动态求值是在表达式实际执行时才确定其值,而静态求值则在...

    微分方程实验.ppt.zip

    - **Lambda表达式**:简化函数式编程,支持高阶函数。 - **模块系统**:Jigsaw项目引入,提高代码组织和依赖管理。 - **类型推断**:编译器自动推断局部变量的类型。 - **并发增强**:如Fork/Join框架,提升多...

    达朗贝尔解法解决数学物理方程

    1. 对于双曲型方程,当判别式 \( D = b^2 - 4ac &gt; 0 \) 时,方程有两个不同的实根 \( \lambda_1, \lambda_2 \)。此时解可以表示为 \( u(x, t) = F(y) + G(y) \),其中 \( y = x - ct \),\( F \) 和 \( G \) 是关于 ...

    初三数学同步练习之一元二次方程检测题.docx

    通过这种方式,学生需要学会如何区分一元一次方程和一元二次方程。 ### 二、一元二次方程的解法 一元二次方程的解法主要包括以下几种方法: **1. 因式分解法**:适用于方程可以因式分解的情况,即把方程写成两个...

    6-2平面简谐波的运动方程.ppt

    - **解**:写出波动方程的标准式 \(y = 0.1\sin(10\pi t - 0.1\pi x)\)。 - **波形图**:根据波动方程画出特定时刻的波形图。 - **质点的振动规律**:分析特定位置质点的振动方程,并绘制振动曲线。 **例3**:一...

    python一行实现代码

    - **lambda 表达式**:使用匿名函数来定义判断条件。 - **列表推导式**:通过列表推导式来生成素数列表。 - **map 函数**:使用 map 函数来应用一个函数到序列的每一个元素上。 - **all 函数**:all 函数用于判断...

    Hutton A Programming in Haskell

    - **Lambda表达式**:介绍了匿名函数(lambda函数)的概念。 - **节段**:讨论了函数的部分应用。 - **章节小结**:总结了本章内容。 - **练习题**:提供了相关的习题供读者练习。 ##### 第5章:列表推导 - **生成...

    julia语言文档(pdf和html版本)

    3. **高阶函数**:Julia提供了丰富的高阶函数,如map、filter和reduce等,方便进行函数式编程。 4. **多重-dispatch**:Julia的核心特性之一是多重调度,即同名函数可以根据传入参数的类型调用不同的实现,增强了...

    sympy的码源包(1.1.1版本)

    7. **函数和序列**:`Lambda` 用于创建匿名函数,`sequences` 模块则提供了序列相关的运算。 8. **物理和几何**:`sympy.physics` 和 `sympy.geometry` 分别提供了物理学和几何学的计算工具,如力的分析、波的传播...

    Sample_11_8.zip_Java 8

    首先,Java 8引入了许多新特性,比如lambda表达式、方法引用来简化代码,Stream API用于处理集合数据,以及Date和Time API的改进,使得日期和时间操作更为便捷。然而,在Android 3D应用开发中,这些特性可能并不直接...

    考研数学思维导图线性代数线代第1讲:行列式-打印版.pdf

    6. **抽象行列式的计算**:当行列式中的元素以函数形式给出时,通常需要利用数学归纳法来求解。 #### 余子式与代数余子式 - **余子式**:去掉矩阵\( A \)的第\( i \)行和第\( j \)列后剩下的\( (n-1) \times (n-1)...

    湖南省长沙市高二数学暑假作业17三角公式及变换(2)理湘教版(精编版).docx

    10. **解答题解题步骤**:解答题通常需要按照一定的逻辑步骤进行,包括但不限于:理解题目条件,应用三角函数的性质和公式,化简表达式,代入条件求解,验证答案的合理性。 总结来说,这个高二数学暑假作业主要涵盖...

    自学Matlab必备的60个小程序代码.zip

    4. **函数与脚本**:Matlab中的函数定义,包括匿名函数(lambda函数)和子函数,以及主脚本的编写和调用。 5. **绘图功能**:Matlab有强大的绘图功能,可以绘制2D和3D图形,包括线图、散点图、柱状图、饼图、等高...

    matlab学习资料

    此外,MATLAB支持函数嵌套和匿名函数(lambda函数),方便进行函数式编程。 三、MATLAB数值计算 MATLAB在数值计算方面表现出色,拥有大量的内置函数,包括线性代数、微积分、概率统计等。例如,可以使用`linalg`...

    MATLAB课件(北京工业大学MATLAB课件)+(哈工大MATLAB课件)

    - **匿名函数与局部变量**:学习使用lambda函数(匿名函数)和理解函数内部的局部变量作用域。 3. **数组与矩阵操作**: - **数组创建**:学习如何创建不同类型的数组,如一维数组、二维数组、多维数组和稀疏矩阵...

Global site tag (gtag.js) - Google Analytics