首页 > 其他分享 >flatMap

flatMap

时间:2023-03-31 21:02:22浏览次数:56  
标签:flatMap Stream stream List list l2

概述

flatMap() 是Stream类中的方法,用于在Java中扁平化流。

Stream

流能够保存不同类型的数据。

  1. Stream<T> – 每个元素都是一个对象的流。
  2. IntStreamDoubleStream, 或者 LongStream – 每个元素都是原始数据类型的流。
  3. Stream<int[]> – 每个元素都是原始数组的流。
  4. Stream<T[]> – 每个元素都是一个对象数组的流。
  5. Stream<List<T>> – 每个元素都是一个列表的流。
  6. Stream<Collection<T>> – 每个元素都是一个集合的流。

flatMap用法

flatMap() 方法可用于在 Java 中扁平化流,如下所示:
Stream<T[]> --> Stream<T>
Stream<List<T>> --> Stream<T>
 flatMap() 可以转换流 { {"A", "B", "C"}, {"D", "E", "F"} } 至
{ "A", "B", "C", "D", "E", "F" }
flatMap() 采用映射方法,该方法将应用于流的每个元素,以促进流的扁平化。

例子

多个List或两层List的扁平化

public static void main(String[] args) {  
	m1();  
	m2();  
}  
  
/**  
* 多个list合并为一个list  
* 1. Stream.of(l1, l2),产生的是Stream<List<String>>  
* 2. flatmap,扁平化为一个流,Stream<String>  
*/  
public static void m1() {  
	List<String> l1 = Arrays.asList("A", "B");  
	List<String> l2 = Arrays.asList("C", "D");  
	List<String> list = Stream.of(l1, l2).flatMap(List::stream)
	.collect(Collectors.toList());  
	log.info("list:{}", list);  
}  
  
/**  
* 两层List的扁平为一层List  
*/  
public static void m2() {  
	List<List<String>> list = new ArrayList<>();  
	List<String> l1 = Arrays.asList("A", "B");  
	List<String> l2 = Arrays.asList("C", "D");  
	list.add(l1);  
	list.add(l2);  
	List<String> fList = list.stream()
	.flatMap(List::stream).collect(Collectors.toList());  
	log.info("fList:{}", fList);  
}

结果

19:27:12.728 [main] INFO com.xy.base.stream.FlatMapTest - list:[A, B, C, D]
19:27:12.744 [main] INFO com.xy.base.stream.FlatMapTest - fList:[A, B, C, D]

flatMapToInt

Stream.of() 原始整数数组上的方法返回 Stream<int[]>.我们可以用 flatMapToInt() 转换原始数组流的方法 Stream<int[]> 至 IntStream,然后转换为List<Integer>

public static void m3() {  
	int[] array1 = new int[]{1, 2};  
	int[] array2 = new int[]{3, 4};  
	List<Integer> list = Stream.of(array1, array2).flatMapToInt(Arrays::stream)  
		.boxed()  
		.collect(Collectors.toList());  
		log.info("list:{}", list);  
}

结果

20:36:57.229 [main] INFO com.xy.base.stream.FlatMapTest - list:[1, 2, 3, 4]

类似的还有flatMapToDouble,flatMapToLong

参考资料

https://www.techiedelight.com/zh/flatten-streams-flatmap-method-java8/

标签:flatMap,Stream,stream,List,list,l2
From: https://www.cnblogs.com/assembly--/p/17277455.html

相关文章

  • Stream流中的flatMap
    @TestvoidcontextLoads(){//字符串判NULLList<Optional<String>>list=Arrays.asList(Optional.of("A"),Optio......
  • JAVA8 lambda中map和flatMap
     lambda中map是对流元素进行转换,flatMap是对流中的元素(集合)进行平铺后合并,即对流中的每个元素平铺后又转换成为了Stream流。 flatMap首先将一个函数应用于元素,然后......
  • ES6-ES11 ES10数组方法扩展-flat与flatMap
    原视频<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title......
  • java8 flatmap的使用
    Useruser=newUser(“[email protected]”,“1234”);user.setPosition(“Developer”);Stringposition=Optional.ofNullable(user).flatMap(u->u.getPosition()).......
  • 【JDK特性】stream 里面的map和flatMap区别
    背景JDK8中,stream流程下的map就不多说了,很熟悉,flatmap倒是不是特别熟悉,map和flatMap的区别看一个例子:List<String>cityListOne=newArrayList<>();......
  • java stream map和 flatmap区别
    区别:mapmapper返回R,flatMapmapper返回Stream<R>官网解释1,<R> Stream<R>flatMap(Function<?super T,?extends Stream<?extendsR>> mapper) Returnsastream......
  • 【JavaScript 教程】第六章 数组17—flatMap() :对每个元素执行映射函数并将结果展平
    英文 | https://www.javascripttutorial.net/译文|杨小爱在上节,我们学习如何使用 JavaScriptArrayflat()方法来展平数组,错过的小伙伴可以点击文章《​​【JavaScrip......
  • 60-ES10-数组方法扩展-flat与flatMap
     ......
  • 手写flat 与 flatMap
    今天又收获一个生产故障,原因是测试过程中在浏览器里测的,浏览器版本较高,然后这个项目是内嵌在客户端里面,客户端内的浏览器版本稍微低一点,不支持flat方法和flatMap方法,所以。......
  • FlatMap和map的区别
    FlatMap和map的区别官方解释map返回一个流,流里的元素是,原流元素经常函数处理的结果。也可以理解为将原流的元素,通过function进行处理后替换。flatMap返回一个流,先将......