Stream.map()
是Stream
最常用的一个转换方法,它把一个Stream
转换为另一个Stream
。
所谓map
操作,就是把一种操作运算,映射到一个序列的每一个元素上。例如,对x
计算它的平方,可以使用函数f(x) = x * x
。我们把这个函数映射到一个序列1,2,3,4,5上,就得到了另一个序列1,4,9,16,25:
f(x) = x * x │ │ ┌───┬───┬───┬───┼───┬───┬───┬───┐ │ │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ [ 1 2 3 4 5 6 7 8 9 ] │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ [ 1 4 9 16 25 36 49 64 81 ]
可见,map
操作,把一个Stream
的每个元素一一对应到应用了目标函数的结果上。
Stream s = Stream.of(1, 2, 3, 4, 5); Stream s2 = s.map(n -> n * n);
如果我们查看Stream
的源码,会发现map()
方法接收的对象是Function
接口对象,它定义了一个apply()
方法,负责把一个T
类型转换成R
类型:
Stream map(Function mapper);
其中,Function
的定义是:
@FunctionalInterfacepublic interface Function { // 将T类型转换为R: R apply(T t); }
利用map()
,不但能完成数学计算,对于字符串操作,以及任何Java对象都是非常有用的。例如: