共计 1002 个字符,预计需要花费 3 分钟才能阅读完成。
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 | |
│ | |
┌───┬───┬───┬───┼───┬───┬───┬───┐ | |
│ │ │ │ │ │ │ │ │ | |
▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ | |
[ | ]|
│ │ │ │ │ │ │ │ │ | |
▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ | |
[ | ]
可见,map
操作,把一个 Stream
的每个元素一一对应到应用了目标函数的结果上。
Stream<Integer> s = Stream.of(1, 2, 3, 4, 5); | |
Stream<Integer> s2 = s.map(n -> n * n); |
如果我们查看 Stream
的源码,会发现 map()
方法接收的对象是 Function
接口对象,它定义了一个 apply()
方法,负责把一个 T
类型转换成 R
类型:
<R> Stream<R> map(Functionextends R> mapper); super T, ? | |
其中,Function
的定义是:
@FunctionalInterface | |
public interface Function<T, R> {// 将 T 类型转换为 R: | |
R apply(T t); | |
} |
利用map()
,不但能完成数学计算,对于字符串操作,以及任何 Java 对象都是非常有用的。例如:
import java.util.*; | |
import java.util.stream.*; | |
public class Main {public static void main(String[] args) {List.of("Apple", "pear", "ORANGE", "BaNaNa") | |
.stream() | |
.map(String::trim) // 去空格 | |
.map(String::toLowerCase) // 变小写 | |
.forEach(System.out::println); // 打印 | |
} | |
} |
通过若干步 map
转换,可以写出逻辑简单、清晰的代码。
练习
使用 map()
把一组 String
转换为 LocalDate
并打印。
下载练习
小结
map()
方法用于将一个 Stream
的每个元素映射成另一个元素并转换成一个新的Stream
;
可以将一种元素类型转换成另一种元素类型。
正文完
星哥玩云-微信公众号
