Java8 Lambda 表达式与 Stream
Java8 Lambda 表达式
什么是 Lambda 表达式
Lambda 表达式(lambda expression)是一个匿名函数,Lambda 表达式基于数学中的 λ 演算
得名,直接对应于其中的 lambda 抽象(lambda abstraction),是一个匿名函数,即没有函数
名的函数。
面向对象与面向函数。
Java 里,函数不是第一等公民,需要封装到接口里。从而 Java Lambda 表达式 --> 内部匿名类。
只有一行时可以省略大括号:
(parameters) -> expression 或(parameters) ->{ statements; }
示例:
1. 不需要参数,返回值为 5
() -> 5
2. 接收一个参数(数字类型),返回其 2 倍的值
x -> 2 * x
3. 接受 2 个参数(数字),并返回他们的差值
(x, y) -> x – y
4. 接收 2 个 int 型整数,返回他们的和
(int x, int y) -> x + y
5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回 void)
(String s) -> System.out.print(s)
什么是流
Stream(流)是一个来自数据源的元素队列并支持聚合操作
•元素:特定类型的对象,形成一个队列。 Java 中的 Stream 并不会存储元素,而是按需计算。
•数据源:流的来源。可以是集合,数组,I/O channel,产生器 generator 等。
•聚合操作:类似 SQL 语句一样的操作,比如 filter, map, reduce, find, match, sorted 等。
•和以前的 Collection 操作不同, Stream 操作还有两个基础的特征:
•Pipelining:中间操作都会返回流对象本身。这样多个操作可以串联成一个管道,如同流式风格(fluent style)。这样做可以对操作进行优化,比如延迟执行(laziness)和短路(short-circuiting)。
•内部迭代:以前对集合遍历都是通过 Iterator 或者 For-Each 的方式,显式的在集合外部进行迭代,这叫做外部迭代。Stream 提供了内部迭代的方式,通过访问者模式(Visitor)实现。
版权声明: 本文为 InfoQ 作者【风翱】的原创文章。
原文链接:【http://xie.infoq.cn/article/07e8fbc1889ca4baa161ae475】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论