最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

即时:flatMap

来源:博客园


(资料图)

概述

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

Stream

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

  1. Stream– 每个元素都是一个对象的流。
  2. IntStream,DoubleStream, 或者LongStream– 每个元素都是原始数据类型的流。
  3. Stream– 每个元素都是原始数组的流。
  4. Stream– 每个元素都是一个对象数组的流。
  5. Stream>– 每个元素都是一个列表的流。
  6. Stream>– 每个元素都是一个集合的流。

flatMap用法

flatMap()方法可用于在 Java 中扁平化流,如下所示:Stream-->StreamStream>-->StreamflatMap()可以转换流{ {"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>  * 2. flatmap,扁平化为一个流,Stream  */  public static void m1() {  List l1 = Arrays.asList("A", "B");  List l2 = Arrays.asList("C", "D");  List list = Stream.of(l1, l2).flatMap(List::stream).collect(Collectors.toList());  log.info("list:{}", list);  }    /**  * 两层List的扁平为一层List  */  public static void m2() {  List> list = new ArrayList<>();  List l1 = Arrays.asList("A", "B");  List l2 = Arrays.asList("C", "D");  list.add(l1);  list.add(l2);  List 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.我们可以用flatMapToInt()转换原始数组流的方法StreamIntStream,然后转换为List

public static void m3() {  int[] array1 = new int[]{1, 2};  int[] array2 = new int[]{3, 4};  List 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/

关键词: