成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java流Map和FlatMap之間的區別

開發 前端
Java 8為我們提供了使用map和flatMap方法,可以在Stream和Optional上進行元素轉換處理,flatMap可以處理Collection數組扁平化。

概述

map和flatMap API源于Java Stream流,在Java8中可以在Optional、Stream和CompletableFuture中找到相關用法。

Stream流表示一系列對象,而Optional表示對象存在或不存在的類,在不同的聚合操作中包括有map和flatMap方法。

Optional使用Map和Flatmap

map方法與Optional配合得很好,比如返回需要的確切類型:

Optional<String> s = Optional.of("test");
assertEquals(Optional.of("TEST"), s.map(String::toUpperCase));

使用map會導致嵌套結構,因為map實現會在內部進行額外的包裝:

assertEquals(Optional.of(Optional.of("STRING")), 
  Optional
  .of("string")
  .map(s -> Optional.of("STRING")));

正如我們所看到的,最終得到了嵌套結構Optional<Optional<String>。雖然它可以工作,但使用起來相當麻煩,所以最好保持扁平化的結構。

這正是flatMap可以做到的:

assertEquals(Optional.of("STRING"), Optional
  .of("string")
  .flatMap(s -> Optional.of("STRING")));

Streams使用Map和Flatmap

map方法將底層序列封裝在Stream實例中,而flatMap方法允許避免嵌套的Stream<Stream<R>>結構。

比如以下例子,map生成一個Stream,該Stream由將toUpperCase方法應用于輸入Stream的元素組成:

List<String> myList = Stream.of("a", "b")
  .map(String::toUpperCase)
  .collect(Collectors.toList());
assertEquals(asList("A", "B"), myList);

map在這樣一個簡單的情況下工作得很好。但是,如果更復雜的比如一個包含多個列表的列表作為輸入,讓我們看看它是如何工作的:

List<List<String>> list = Arrays.asList(
  Arrays.asList("a"),
  Arrays.asList("b"));
System.out.println(list);

此片段打印:[[a],[b]]

現在讓我們使用flatMap:

System.out.println(list
  .stream()
  .flatMap(Collection::stream)
  .collect(Collectors.toList()));

片段的結果將被扁平化為[a,b]。

flatMap方法首先將輸入的多級Stream扁平化為同級Stream,之后,它的工作原理與map方法類似。

結論

Java 8為我們提供了使用map和flatMap方法,可以在Stream和Optional上進行元素轉換處理,flatMap可以處理Collection數組扁平化。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2024-09-09 13:10:14

2024-09-03 10:06:43

JavaMap項目

2021-02-14 10:06:54

RPAAICIO

2020-06-09 07:00:00

RHELCentOSFedora

2009-01-19 13:35:57

ETLEAI數據倉庫

2023-03-29 08:35:11

RMANBackupSets

2011-03-17 15:48:32

jQuery

2022-09-14 11:17:13

云計算邊緣計算

2025-04-28 10:13:03

JavaScript數組代碼

2020-12-22 14:11:45

JS forEach()map()

2024-03-17 20:01:51

2018-02-28 11:34:20

2025-06-06 04:00:00

2023-06-14 08:54:09

Map方法ForEach方法

2013-09-11 09:49:18

Java數組集合

2018-05-21 21:26:59

Apache HiveHbaseSQL

2021-01-29 15:10:32

機器學習

2012-04-27 09:24:44

程序員編碼員

2022-04-07 16:03:36

JavaScriptTypeScript

2020-08-02 23:20:36

JavaScriptmap()forEach()
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧洲成人午夜免费大片 | 亚洲欧美一区二区在线观看 | 国产网站在线免费观看 | 无码一区二区三区视频 | 午夜一级做a爰片久久毛片 精品综合 | 亚洲黄色在线 | 亚洲精品免费在线观看 | 国产免费福利小视频 | 久久久美女 | 亚洲精品国产第一综合99久久 | 国产午夜亚洲精品不卡 | 免费高清av | 成人精品一区二区三区中文字幕 | 天堂中文在线观看 | 56pao在线 | 国产视频福利一区 | 久久网站黄 | 精品国产一区二区三区久久久蜜月 | 天天射视频 | 手机在线不卡av | 久久天天躁狠狠躁夜夜躁2014 | 欧美亚洲网站 | 精品一区二区三 | 久久久久久影院 | 一区二区高清不卡 | 国产精品一区二区不卡 | 欧美亚洲另类丝袜综合网动图 | 久久专区| 日本午夜视频 | 欧美成人精品在线 | 国产98色在线 | 日韩 | 91视频a | 亚洲精品一二三区 | 99这里只有精品 | 日日操天天射 | 中文字幕免费视频 | 久久久精品视频免费 | 好姑娘影视在线观看高清 | 欧美九九 | 欧美精品一区二区三区四区 | 欧美国产日韩在线观看 |