`
xuanzhui
  • 浏览: 199556 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Lambda表达式初识

    博客分类:
  • Java
阅读更多

Lambda表达式作为Java8引入的新语法,使Java也可以实现函数式编程风格。

 

函数式编程与命令式编程最大的不同在于:函数式编程关心数据的映射,命令式编程关心解决问题的步骤,面向对象编程是也是一种命令式编程。

 

另外函数式编程强调没有“副作用”,对目标对象的处理结果不应该改变原来的对象,其他外部变量也不应该受到影响,也正是这个特性,函数式编程的并行化处理也不需要关注锁的问题。

 

java的Lambda表达式与interface紧密相关,在使用前首先应该对函数定义有比较清晰的了解,并不是所有的地方都可以使用Lambda表示来简化,比如通过Lambda表达式来创建一个进程

new Thread(() -> {
    System.out.println("runnable running");
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println("runnable exit");
}).start();

 由于Thread需要一个实现Runnable的类作为参数,同时Runnable只有一个方法需要实现,该方法不需要传入参数,那么就可以直接通过如下的形式来替代之前的匿名类:

() -> { //相关代码,如果只有一条执行语句,可以不要大括号 }

 

像GUI类型的需要传入event参数的

event -> { //相关代码 }

 

这意味着在设计公共接口的时候也要注意这样的限制,如果希望你的接口可以方便用户使用Lambda表达式来调用,那么定义的interface应当仅包含一个需要实现的方法。

 

再如,现在定义一个二目运算,但具体是加、减等方式由用户自己决定,这边只演示整型,其实java8里面已经有类似的接口

interface MyBiFunc {
    long apply(long left, long right);
}

 

然后定义处理的函数

static long biFunc(long left, long right,
        MyBiFunc biFunction) {
    return biFunction.apply(left, right);
}

 

最后在调用时实现具体的操作

public static void main(String[] args) {
    long num1 = 2, num2 = 3;
    System.out.println("add res=" + biFunc(num1, num2, (left, right) -> left + right));
    System.out.println("multiply res=" + biFunc(num1, num2, (left, right) -> left * right));
}

 

在参数类型模棱两可的时候,可以手动设置参数的类型,例如

(long left, long right) -> { //相关代码 }

 

 

 

分享到:
评论

相关推荐

    Java初识Lambda表达式

    Java中的Lambda表达式是语言的一项重要特性,引入于Java 8,它的主要目的是为了简化代码,提高可读性,特别是处理函数式编程场景时。Lambda表达式允许我们以一种更简洁的方式实现那些只需要一次的匿名函数,即无须...

    C# 3.0 锐利体验系列课程

    《C# 3.0 锐利体验系列课程》是一套深入浅出的视频教程,专为想要深入了解和熟练运用C# 3.0中Linq(Language Integrated Query,语言集成查询)和Lambda表达式的开发者设计。这个系列课程通过丰富的实例和详尽的解释...

    Beginning Java 8 Language Features源代码

    Java 8引入了Lambda表达式,它是一种简洁的匿名函数表示方式,使得函数可以像对象一样被传递和使用。Lambda表达式由三部分组成:参数列表、箭头符号和函数体。例如 `(int x, int y) -> x + y` 表示一个接受两个整数...

    Beginning Java 8 Fundamentals源代码

    1. **lambda表达式**:Java 8引入了lambda表达式,简化了函数式编程。它允许我们将匿名函数作为方法参数或直接赋值给变量,使得代码更加简洁、易读。例如,`Runnable r = () -> System.out.println("Hello, Lambda!...

    第一章 初识C++.zip

    此外,C++11、C++14、C++17等新标准引入了许多现代特性和改进,如lambda表达式、auto关键字、右值引用、协程等,这些都使得C++更加现代化,增强了其表达力和性能。 学习C++不仅需要理解语法和概念,还需要大量的...

    初识Java8中的Stream

    Stream API的基础是lambda表达式,通过lambda表达式可以将复杂的数据处理逻辑简洁地表示出来。 在Java8中,Stream API的主要特性有三点: 1. Stream不存储数据:Stream不会专门存储数据,对Stream的操作也不会影响...

    Beginning Java 8 Fundamentals.pdf_java_

    其中最显著的变化之一是Lambda表达式,这是一种简洁的匿名函数表示方式,使得代码更易读、更简洁。通过Lambda,程序员可以处理集合数据更加高效,尤其是在并发编程中,可以更方便地编写并行操作。 另一个重大更新是...

    01 - 初识Java ASM - 简书1

    - 框架和库的构建:ASM被用在OpenJDK中生成Lambda表达式的调用站点,也用于Nashorn JavaScript编译器、Groovy和Kotlin编译器。此外,CGLIB这样的库依赖于ASM来生成动态代理类,这些代理类在Mockito和EasyMock等测试...

    Java之Stream流初识

    Java中的Stream流是JDK 1.8引入的一项重要特性,它为处理集合数据提供了全新的方式,特别是结合Lambda表达式,极大地提升了代码的简洁性和可读性。Stream流并不是我们传统理解中的I/O流,而是用于处理数据的一种抽象...

    轻松学C#(图解版)

    第三篇是应用技术篇,主要介绍的是异常处理、文件和流、委托、事件、Lambda表达式、命名空间、预处理器、程序集、运行时类型标识、反射、特性、泛型、LINQ和数据库开发等。 =======================================...

    初识JVM – JVM概念.pdf

    - **2014年**:JDK 8引入了Lambda表达式和类型注解等新特性,极大地提高了编程效率。 - **2016年**:JDK 9标志着模块化的开始,这是Java发展史上的一个重要里程碑。 #### 三、JVM历史大事记 - **HotSpot**:最初由...

    初识C#及其开发环境

    9. 高级特性:C#还包括委托、事件、匿名方法、Lambda表达式、异步编程模型(async/await)等高级特性,这些在实际开发中非常实用。 在学习过程中,你将接触到的模块可能包括: 1. C#基础:介绍C#的语法基础,如...

    Phthon学习视频.zip

    26-正则表达式-初识.flv 27-正则表达式-元字符.flv 28-正则表达式-常用函数.flv 29-正则表达式-re属性-分组.flv 30-爬虫.flv7 31-深拷贝-浅拷贝.flv 33-文件-2-文件对象的方法.flv 34-文件-3-OS模块.flv 35-目录遍历...

    C#经典教程C#全面解析

    第4章“深入C#编程”则涵盖了更高级的主题,如委托、事件、匿名方法、Lambda表达式和表达式树,这些都是C#中的功能强大的工具,尤其在处理异步编程和 LINQ (Language Integrated Query) 时显得尤为重要。此外,还会...

    AI学习知识点.xmind

    lambda表达式 递归函数及递归优化 常用内置函数/高级函数 项目案例: 约瑟夫环问题 常用库 时间库 并发库 科学计算库 Matplotlib可视化会图库 锁和线程 多线程变成 3. 机器学习 机器学习 理论概述 ...

    C++标准模板库编程实战

    这本书全面升级至C++14标准,这意味着它不仅涵盖了C++的基础语法和概念,还涉及到C++14引入的新特性,如自动类型推导、通用lambda表达式等。C++14的更新使得语言更加现代,编程更加简洁和灵活。 在深入解析STL时,...

    Beginning_Java_Se_6__Platform_From_Novice_to_Professional.rar

    在函数式编程方面,Java SE 6引入了匿名内部类和Lambda表达式,尽管这部分在Java 8中得到了进一步强化,但书中也会进行简单介绍。这些新特性使得Java更加简洁和高效,特别是处理集合和并发操作时。 此外,书中还...

    Beginning Java 8 Fundamentals pdf

    书中还提到了Java 8的一些新特性,比如lambda表达式、Stream API以及新的日期时间API,这些新特性增强了Java语言的表达能力,并使得Java更加现代化。尽管在提供的部分内容中并没有直接描述这些特性,但根据书名和...

    C#.NET 开发者手册

    随着基础的巩固,手册将探讨更高级的主题,如泛型、匿名方法、Lambda表达式和LINQ(Language Integrated Query)。这些特性大大增强了代码的灵活性和效率,尤其是在处理数据集合时。同时,异步编程(async/await)也...

    Beginning Spring 5 From Novice to Professional

    这意味着你可以充分利用Java 8的新特性,如lambda表达式、流API和日期时间API,来编写更加简洁和高效的代码。此外,Spring 5还增强了对反应式编程的支持,引入了Spring WebFlux模块,这使得构建非阻塞、高性能的Web...

Global site tag (gtag.js) - Google Analytics