使用map


Stream.map()Stream最常用的一个转换方法,它把一个Stream转换为另一个Stream

所谓map操作,就是把一种操作运算,映射到一个序列的每一个元素上。例如,对x计算它的平方,可以使用函数f(x) = x * x。我们把这个函数映射到一个序列1,2,3,4,5上,就得到了另一个序列1,4,9,16,25:

  1. f(x) = x * x
  2. ┌───┬───┬───┬───┼───┬───┬───┬───┐
  3. [ 1 2 3 4 5 6 7 8 9 ]
  4. [ 1 4 9 16 25 36 49 64 81 ]

可见,map操作,把一个Stream的每个元素一一对应到应用了目标函数的结果上。

  1. Stream<Integer> s = Stream.of(1, 2, 3, 4, 5);
  2. Stream<Integer> s2 = s.map(n -> n * n);

如果我们查看Stream的源码,会发现map()方法接收的对象是Function接口对象,它定义了一个apply()方法,负责把一个T类型转换成R类型:

  1. <R> Stream<R> map(Function<? super T, ? extends R> mapper);

其中,Function的定义是:

  1. @FunctionalInterface
  2. public interface Function<T, R> {
  3. // 将T类型转换为R:
  4. R apply(T t);
  5. }

利用map(),不但能完成数学计算,对于字符串操作,以及任何Java对象都是非常有用的。例如:

使用map - 图1

通过若干步map转换,可以写出逻辑简单、清晰的代码。

练习

使用map()把一组String转换为LocalDate并打印。

使用map - 图2下载练习:map练习 (推荐使用IDE练习插件快速下载)

小结

map()方法用于将一个Stream的每个元素映射成另一个元素并转换成一个新的Stream

可以将一种元素类型转换成另一种元素类型。

读后有收获可以支付宝请作者喝咖啡:

使用map - 图3