主要的区别
flatMap与Map俩个方法都是对Stream中的单个元素进行替换,但是flatMap是把单个元素换成的所有元素进行串起来,最后每一个单个元素里面的单个元素都是单个元素,就比如一个String字符串类型在flatMap方法中进行toArray()变换成了数组char[]类型,flatMap方法会将所有数组里面的元素全部提取出来,最后将他们串起来,并且flatMap方法最后的返回值一定要是Stream类型,所以最后需要用Stream.of()将你的转换后的参数包裹起来变成Stream类型。
而在Map方法中String类型参数运用toArray()方法变成了数组char[]类型,最后串起来的单个元素还是每个char[]类型了,并不会进行再细分,并且Map方法不像flatMap方法最后规定了需要返回固定类型值,你可以随意返回你想返回的类型值。
如果还是不懂可以看代码例子。(●’◡’●)
例如:
List<String> list = new ArrayList<>();
list.add("Holle world and you world");
//flatMap方法
list.stream().flatMap(t -> Stream.of(t.split("\\s+"))).
filter(t -> word.equalsIgnoreCase(t)).forEach(System.out::println);
//结果为:Holle
// world
// and
// you
// world
//Map方法
list.stream().Map(t -> Stream.of(t.split("\\s+"))).
filter(t -> word.equalsIgnoreCase(t)).forEach(System.out::println);
//而Map方法最后的结果为一个地址,并没有对数组里面的结果进行细分最后的结果依旧为一个整体
总结
如果是没有需要再进行细分的情况可以直接运用Map方法,里面的返回类型自己定义,非常具有灵活性
如果是需要进行再细分,运用flatMap方法能够很好的给你便利
最后希望看完哦,非常有帮助