写点什么

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)实现。


发布于: 刚刚阅读数: 2
用户头像

风翱

关注

还未添加个人签名 2017.11.24 加入

勇于尝试,持续成长

评论

发布
暂无评论
Java8 Lambda表达式与Stream