自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java流Map和FlatMap之間的區(qū)別

開發(fā) 前端
Java 8為我們提供了使用map和flatMap方法,可以在Stream和Optional上進(jìn)行元素轉(zhuǎn)換處理,flatMap可以處理Collection數(shù)組扁平化。

概述

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

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

Optional使用Map和Flatmap

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

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

使用map會(huì)導(dǎo)致嵌套結(jié)構(gòu),因?yàn)閙ap實(shí)現(xiàn)會(huì)在內(nèi)部進(jìn)行額外的包裝:

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

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

這正是flatMap可以做到的:

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

Streams使用Map和Flatmap

map方法將底層序列封裝在Stream實(shí)例中,而flatMap方法允許避免嵌套的Stream<Stream<R>>結(jié)構(gòu)。

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

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

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

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

此片段打?。篬[a],[b]]

現(xiàn)在讓我們使用flatMap:

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

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

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

結(jié)論

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

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2024-09-09 13:10:14

2024-09-03 10:06:43

JavaMap項(xiàng)目

2021-02-14 10:06:54

RPAAICIO

2020-06-09 07:00:00

RHELCentOSFedora

2025-04-28 10:13:03

JavaScript數(shù)組代碼

2023-03-29 08:35:11

RMANBackupSets

2009-01-19 13:35:57

ETLEAI數(shù)據(jù)倉庫

2011-03-17 15:48:32

jQuery

2022-09-14 11:17:13

云計(jì)算邊緣計(jì)算

2020-12-22 14:11:45

JS forEach()map()

2024-03-17 20:01:51

2018-02-28 11:34:20

2013-09-11 09:49:18

Java數(shù)組集合

2023-06-14 08:54:09

Map方法ForEach方法

2018-05-21 21:26:59

Apache HiveHbaseSQL

2021-01-29 15:10:32

機(jī)器學(xué)習(xí)

2022-04-07 16:03:36

JavaScriptTypeScript

2012-04-27 09:24:44

程序員編碼員

2020-08-02 23:20:36

JavaScriptmap()forEach()

2024-02-20 08:45:13

雙大括號(hào)建立Java Map通用的模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)