本文档的的blog版http://blog.csdn.net/zhrubin/article/details/24598873#t2 说明:本文档主要讲解java8中的Lambda表达式。内容完全基于java 8 tutorial,加上一些自己的注释与理解。使用代码本身来进行解释(这是java 8 tutorial中的风格),同时去掉一些无关紧要的知识点(比如泛型等),并且增加了一些自己的必要的注释,相信更易于大家理解。 Java 8 中的 Lambda 表达式是语言的重大更新,它引入了函数式编程的概念,使得代码更加简洁、易读。Lambda 表达式的主要目的是简化处理匿名内部类的情况,尤其是当这些类只需要一个方法时。 在传统的 Java 编程中,如果需要对集合进行过滤或操作,通常会定义一个接口并实现该接口的方法,如 Approach 3 和 Approach 4 所示。然而,这样的方式代码冗余且可读性较差。Lambda 表达式则允许我们直接在调用方法时传递行为,就像 Approach 5 那样。 Lambda 表达式的语法如下: `(parameters) -> expression` 这里的 `parameters` 是参数列表,`expression` 是执行的操作。例如,在 Approach 5 中的 Lambda 表达式 `(Person p) -> p.getGender() == Person.Sex.MALE && p.getAge() >= 18 && p.getAge() <= 25` 就是一个接受一个 `Person` 类型参数 `p` 的 Lambda,然后返回一个布尔值,表示这个人的性别为 `MALE` 并且年龄在 18 至 25 岁之间。 Lambda 表达式可以被赋值给一个变量,或者作为参数传递给方法。在 Java 8 中,它们常常与称为函数式接口的特殊接口一起使用。函数式接口只有一个抽象方法,例如 `java.util.function.Predicate` 接口,它的 `test` 方法接收一个对象并返回一个布尔值,非常适合用于条件检查。 在 Approach 5 中,`CheckPerson` 接口可以被 `Predicate<Person>` 替代,使代码更具通用性。这样,我们就可以这样写: ```java import java.util.function.Predicate; // ... printPersons(roster, p -> p.getGender() == Person.Sex.MALE && p.getAge() >= 18 && p.getAge() <= 25); ``` 此外,Java 8 提供了一系列内置的函数式接口,如 `Consumer`(无返回值,只执行操作)、`Function`(将一个对象转换成另一个对象)和 `Supplier`(提供一个值,无需输入参数)。这些接口与 Stream API 结合使用,能够方便地对集合进行过滤、映射和聚合操作,大大提高了代码的简洁性和可读性。 Lambda 表达式还可以配合方法引用来使用。例如,`List` 接口中的 `sort` 方法接受一个 `Comparator`,我们可以用 Lambda 来实现比较逻辑: ```java roster.sort((p1, p2) -> Integer.compare(p1.getAge(), p2.getAge())); ``` Java 8 的 Lambda 表达式是简化代码、提高代码可读性和灵活性的重要工具。通过将行为作为参数传递,Lambda 表达式使得函数式编程风格在 Java 中得以实现,为开发者提供了更多编写高效、简洁代码的选择。
剩余9页未读,继续阅读
- 粉丝: 17
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Django和OpenCV的智能车视频处理系统.zip
- (源码)基于ESP8266的WebDAV服务器与3D打印机管理系统.zip
- (源码)基于Nio实现的Mycat 2.0数据库代理系统.zip
- (源码)基于Java的高校学生就业管理系统.zip
- (源码)基于Spring Boot框架的博客系统.zip
- (源码)基于Spring Boot框架的博客管理系统.zip
- (源码)基于ESP8266和Blynk的IR设备控制系统.zip
- (源码)基于Java和JSP的校园论坛系统.zip
- (源码)基于ROS Kinetic框架的AGV激光雷达导航与SLAM系统.zip
- (源码)基于PythonDjango框架的资产管理系统.zip