最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Java8中map()和flatMap()的一些事

 更新時間:2020年10月25日 11:22:54   作者:ShikoWei  
這篇文章主要給大家介紹了關(guān)于Java8中map()和flatMap()的一些事,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

兩個方法的背景

這兩個方法看起來做著同樣的事情,但實際上又有些不一樣??丛创a部分是這樣的

package java.util.stream;

map()方法

/**
* @param <R> The element type of the new stream
* @param mapper a <a href="package-summary.html#NonInterference" rel="external nofollow" rel="external nofollow" >non-interfering</a>,
* <a href="package-summary.html#Statelessness" rel="external nofollow" rel="external nofollow" >stateless</a>
*    function to apply to each element
* @return the new stream
*/
 <R> Stream<R> map(Function<? super T, ? extends R> mapper);

flatMap()方法

/**
* @param <R> The element type of the new stream
* @param mapper a <a href="package-summary.html#NonInterference" rel="external nofollow" rel="external nofollow" >non-interfering</a>,
* <a href="package-summary.html#Statelessness" rel="external nofollow" rel="external nofollow" >stateless</a>
* function to apply to each element which produces a stream
* of new values
* @return the new stream
*/
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);

Stream map() Method

看源碼做推測,map是一種中間操作,返回的是Stream

代碼測試

map()方法

public static void main(String[] args) {
  System.out.println("Output with simple list");
  List<String> vowels = Arrays.asList("A", "E", "I", "O", "U");
  vowels.stream().map(vowel -> vowel.toLowerCase())
    .forEach(value -> System.out.println(value));
  List<String> haiList = new ArrayList<>();
  haiList.add("hello");
  haiList.add("hai");
  haiList.add("hehe");
  haiList.add("hi");
  System.out.println("Output with nested List of List<String>");
  List<String> welcomeList = new ArrayList<>();
  welcomeList.add("You got it");
  welcomeList.add("Don't mention it");
  welcomeList.add("No worries.");
  welcomeList.add("Not a problem");
  List<List<String>> nestedList = Arrays.asList(haiList, welcomeList);
  nestedList.stream().map(list -> {
   return list.stream().map(value -> value.toUpperCase());
  }).forEach(value -> System.out.println(value));
 }

Output

Output with simple list
a
e
i
o
u
Output with nested List of List<String>
java.util.stream.ReferencePipeline$3@3b9a45b3
java.util.stream.ReferencePipeline$3@7699a589

flatMap()方法

public static void main(String[] args) {
  List<String> haiList = new ArrayList<>();
  haiList.add("hello");
  haiList.add("hai");
  haiList.add("hehe");
  haiList.add("hi");
  System.out.println("Output with nested List of List<String>");
  List<String> welcomeList = new ArrayList<>();
  welcomeList.add("You got it");
  welcomeList.add("Don't mention it");
  welcomeList.add("No worries.");
  welcomeList.add("Not a problem");
  List<List<String>> nestedList = Arrays.asList(haiList, welcomeList);
  nestedList.stream().flatMap(
    list -> list.stream())
    .map(value -> value.toUpperCase())
    .forEach(value -> System.out.println(value));
 }

Output

Output with nested List of List<String>
HELLO
HAI
HEHE
HI
YOU GOT IT
DON'T MENTION IT
NO WORRIES.
NOT A PROBLEM

Java 8 map() vs flatMap()

  • map()和flatMap()方法都可以應(yīng)用于Stream <T>和Optional <T>。 并且都返回Stream <R>或Optional <U>。
  • 區(qū)別在于,映射操作為每個輸入值生成一個輸出值,而flatMap操作為每個輸入值生成任意數(shù)量(零個或多個)的值。 在flatMap()中,每個輸入始終是一個集合,可以是List或Set或Map。 映射操作采用一個函數(shù),該函數(shù)將為輸入流中的每個值調(diào)用,并生成一個結(jié)果值,該結(jié)果值將發(fā)送到輸出流。 flatMap操作采用的功能在概念上想消耗一個值并產(chǎn)生任意數(shù)量的值。 但是,在Java中,方法返回任意數(shù)量的值很麻煩,因為方法只能返回零或一個值。

代碼

 public static void main(String[] args) {

  List<Stream> together = Stream.of(Arrays.asList(1, 2), Arrays.asList(3, 4)) // Stream of List<Integer>
    .map(List::stream)
    .collect(Collectors.toList());

  System.out.println("Output with map() -> "+together);


  List<Integer> togetherFlatMap = Stream.of(Arrays.asList(1, 2), Arrays.asList(3, 4)) // Stream of List<Integer>
    .flatMap(List::stream)
    .map(integer -> integer + 1)
    .collect(Collectors.toList());

  System.out.println("Output with flatMap() -> "+togetherFlatMap);
 }

Output

Output with map() -> [java.util.stream.ReferencePipeline$Head@16b98e56, java.util.stream.ReferencePipeline$Head@7ef20235]
Output with flatMap() -> [2, 3, 4, 5]

總結(jié)

到此這篇關(guān)于關(guān)于Java8中map()和flatMap()的文章就介紹到這了,更多相關(guān)Java8中map()和flatMap()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于雪花算法實現(xiàn)增強(qiáng)版ID生成器詳解

    基于雪花算法實現(xiàn)增強(qiáng)版ID生成器詳解

    這篇文章主要為大家詳細(xì)介紹了如何基于雪花算法實現(xiàn)增強(qiáng)版ID生成器,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)具有一定的借鑒價值,需要的可以了解一下
    2022-10-10
  • spring如何使用命名空間p簡化bean的配置

    spring如何使用命名空間p簡化bean的配置

    這篇文章主要介紹了spring如何使用命名空間p簡化bean的配置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Java由淺入深通關(guān)抽象類與接口下

    Java由淺入深通關(guān)抽象類與接口下

    在類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類稱為抽象類,接口是Java中最重要的概念之一,它可以被理解為一種特殊的類,不同的是接口的成員沒有執(zhí)行體,是由全局常量和公共的抽象方法所組成,本文給大家介紹Java抽象類和接口,感興趣的朋友一起看看吧
    2022-04-04
  • java 根據(jù)坐標(biāo)截取圖片實例代碼

    java 根據(jù)坐標(biāo)截取圖片實例代碼

    這篇文章主要介紹了java 根據(jù)坐標(biāo)截取圖片實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • idea?與?maven?使用過程中遇到的問題及解決方案

    idea?與?maven?使用過程中遇到的問題及解決方案

    最近將IDEA 升級到 IntelliJ IDEA 2021.3.2,在將maven項目導(dǎo)入IDEA后,maven build時報異常,這個問題是IntelliJ IDEA 2021.3.2 不兼容導(dǎo)致的,下面小編給大家?guī)砹薸dea?與?maven?使用過程中遇到的問題及解決方案,感興趣的朋友一起看看吧
    2022-05-05
  • 百度Java面試題 前200頁精選(下)

    百度Java面試題 前200頁精選(下)

    這篇文章主要為大家分享了Java面試資源下篇,百度“Java面試題”前200頁都在這里了,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Java實現(xiàn)郵件發(fā)送遇到的問題

    Java實現(xiàn)郵件發(fā)送遇到的問題

    本文給大家分享的是個人在項目過程中,使用Java實現(xiàn)郵件發(fā)送的時候所遇到的幾個問題以及解決方法,有需要的小伙伴可以參考下
    2016-09-09
  • JavaWeb中使用JavaMail實現(xiàn)發(fā)送郵件功能實例詳解

    JavaWeb中使用JavaMail實現(xiàn)發(fā)送郵件功能實例詳解

    這篇文章主要介紹了JavaWeb中使用JavaMail實現(xiàn)發(fā)送郵件功能的實例代碼,非常不錯具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-05-05
  • Seata集成Mybatis-Plus解決多數(shù)據(jù)源事務(wù)問題

    Seata集成Mybatis-Plus解決多數(shù)據(jù)源事務(wù)問題

    當(dāng)進(jìn)行業(yè)務(wù)操作時,訂單發(fā)生異常 ,進(jìn)行了回滾操作,因為在不同的數(shù)據(jù)庫實例中,余額卻扣除成功,此時發(fā)現(xiàn)數(shù)據(jù)不一致問題,本文給大家介紹Seata集成Mybatis-Plus解決多數(shù)據(jù)源事務(wù)問題,感興趣的朋友一起看看吧
    2023-11-11
  • Java開發(fā)支付寶PC支付完整版

    Java開發(fā)支付寶PC支付完整版

    這篇文章主要介紹了Java開發(fā)支付寶PC支付完整版,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評論

临夏县| 两当县| 萍乡市| 衢州市| 栾城县| 白沙| 达孜县| 平远县| 尼勒克县| 武胜县| 洱源县| 锡林浩特市| 夹江县| 宿松县| 格尔木市| 德钦县| 延寿县| 策勒县| 衡水市| 黄浦区| 瓦房店市| 白山市| 阿巴嘎旗| 涿州市| 龙门县| 林芝县| 沧州市| 河北省| 简阳市| 灌云县| 拜城县| 漳州市| 龙胜| 桃江县| 杨浦区| 囊谦县| 秦皇岛市| 博湖县| 厦门市| 壤塘县| 武清区|