Java中的函数式编程(五)Java集合框架中的高阶函数

写在前面

随着Java 8引入了函数式接口和lambda表达式,Java 8中的集合框架(Java Collections Framework, JCF)也增加相应的接口以适应函数式编程。

本文的目标是带领大家熟悉Java 8中集合框架新增的常用接口,让我们的代码更简洁、更高级。

本文的示例代码可从gitee上获取,完整文章获取,搜索关注公众号,员说:

Java中的函数式编程示例代码https://gitee.com/cnmemset/javafphttps://gitee.com/cnmemset/javafp

Java 8中的集合框架

首先,和大家从整体上了解Java集合框架。

Java集合框架,主要是由两个根接口派生出来的:一个是 Collecton接口,用于存放单个元素;另一个是 Map 接口,主要用于存放键值对。

Java集合框架的接口继承结构如下图:

0

Java 8中,主要是Collection、List和Map三个接口新增了一些方法,部分常用的新增函数如下表所示:

接口名

Java8新加入的方法

Collection

forEach(), removeIf(), stream(), parallelStream()

List

replaceAll(), sort()

Map

forEach(), replaceAll(), compute(), computeIfAbsent(), computeIfPresent(), merge()

上述这些函数,它们都包含一个函数式接口类型的参数。这类函数有一个专门的术语:高阶函数(high order function)。

高阶函数(定义):

一个函数,如果它有一个或多个参数是函数类型的,或者它的返回值是函数类型的,那么我们称这个函数为高阶函数。

题外话:

可以发现,这些新增的方法基本都有默认实现(default implementation),这大大减少了具体子类的负担。接口中的默认方法是Java 8的新特性,一个重要的作用就是“接口演化(interface evolution)”。举例说明,假设在Java 8之前,我们有一个类实现了Collection接口:

public class Container implements Collection { ... }

升级到Java 8后,因为Collection中新增了方法 forEach,假设没有默认方法,之前的类 Container 将编译失败。

Collection中的高阶函数

1. forEach

严格来说,forEach方法是定义在接口 Iterable 中的,它的方法签名和默认实现是:

default void forEach(Consumer<? super T> action) {
    Objects.requireNonNull(action);
    for (T t : this) {
        action.accept(t);
    }
}

它的作用是遍历集合中的每一个元素,然后依次对每个元素执行参数 action 指定的动作。参数 action 是一个 Consumer 类型的函数式接口,我们可以通过lambda表达式或方法引用来实现一个 Consumer 。因此,在Java 8或以后的版本中,不要用 for 语句来迭代 Collection 了,不妨使用 forEach 方法。

示例代码如下:

public static void collectionForEach() {
    Collect
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值