IntStream flatMapToInt(Function<? super T,? extends IntStream> mapper)
LongStream flatMapToLong(Function<? super T,? extends LongStream> mapper)
DoubleStream flatMapToDouble(Function<? super T,? extends DoubleStream> mapper)
这三个方法和faltMap功能和使用方法类似,只不过是指定了最终返回结果的数据类型。
上面三个方法我们就只取flatMapToInt这个为例进行说明其功能和用法,看下面例子:
void stream_flatMapToInt() {
List<List<String>> list = List.of(List.of("11","12","13","14"), List.of("1","2","3","4"), List.of("15","16","17"));
IntStream intstream = list.stream().flatMapToInt(onelist -> onelist.stream().mapToInt(str -> Integer.parseInt(str)));
intstream.forEach(System.out::print);
}
运行结果:111213141234151617
最终返回的是个IntStream,也就相当于Stream<Integer>,但是还是有区别,IntStream中元素是int类型,而Stream<Integer>中元素是Integer。IntStream中有个box方法,可以把把IntStraem类型转为Stream<Integer>,看下面代码:
// 把IntStream转为Stream<Integer>
Stream<Integer> Intstream = intstream.boxed();
Intstream.forEach(System.out::print);
运行结果同上。
(在添加上面代码的时候要把这行代码注释掉,否则会报错。//intstream.forEach(System.out::print);)
我们跟踪一下box方法的原代码,发现其实现其实很简单,就是对流中每个int类型的元素使用方法public static Integer valueOf(int i)转换为Integer类型然后保存到一个新的流中返回。