java

60 阅读1分钟

ambda 表达式的一大创新之处,就是为在 Java 语言进行函数式编程提供了可能,由此,Stream(流) API 应运而生。这里所说的“流”并不是指 I/O 流,而是一种数据流动的管道。举个例子,现在有一个包含 10000 个数字的 int 数组:

int[] array = new int[10000]; 我想找出该数组中所有数字大于 5000 的数字,然后让他们加一个不大于 500 的随机数,最后求和。在不使用 Stream API 的情况下我们会这么写:

public int sumRandomNumber(int[] array, Random random){ int rst = 0; for (int i : array) { if (i > 5000) { rst += i + random.nextInt(500); } } return rst; } 但如果有了 Stream API,只需要一行代码就可以解决:

public int sumRandomNumberWithStreamAPI(int[] array, Random random) { return Arrays.stream(array).filter(i -> i > 5000).map(i -> i + random.nextInt(500)).sum(); } 在上述代码中,我们通过调用 Arrays.stream 方法将 array 转换为一个 IntStream 流对象,然后顺次调用 filter 和 map 流中间方法,过滤和映射数据,最终调用 sum 流终结方法,获得求和结果。

一种特定类型的数据经过流中间方法的加工处理,最终经过流终结方法收集为我们想要的形式,这极大地提高了开发效率,而在以前的 Java 中,想要达成这样的操作,会使代码变得极度复杂。