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

java中flatMap用法完整示例

 更新時間:2023年05月17日 16:13:15   作者:luffy5459  
flatMap是java8的Stream流的一個方法,下面這篇文章主要給大家介紹了關(guān)于java中flatMap用法的相關(guān)資料,文中通過示例代碼和圖文介紹的非常詳細,需要的朋友可以參考下

java中map是把集合每個元素重新映射,元素個數(shù)不變,但是元素值發(fā)生了變化。而flatMap從字面上來說是壓平這個映射,實際作用就是將每個元素進行一個一對多的拆分,細分成更小的單元,返回一個新的Stream流,新的流元素個數(shù)增加。

java官方給出的示例如下:

# 按行讀取文件內(nèi)容
Stream<String> lines = Files.lines(path);
# 將每一行文字按照空格拆分為單詞
Stream<String> words = lines.flatMap(line -> Stream.of(line.split(" +")));

如下所示的文本:

hello world
this is a test txt
done

經(jīng)過這個轉(zhuǎn)換,得到的結(jié)果如下:

[hello, world, this, is, a, test, txt, done]

我們大概知道,flatMap壓平的作用,就是把原來的三行字符串文字變?yōu)榱艘粋€流,流數(shù)組中每個元素是單詞。 

============

我們假設(shè)有這樣的需求,有一個[[1,3],[2,4]]的二維數(shù)組,我們要得到一個一維數(shù)組[1,3,2,4]。那么這里的flatMap就正好排上用場,原來是二維的,現(xiàn)在壓平為一維,正好分解了。

List<Integer> lista = new ArrayList<>();
lista.add(1);
lista.add(3);
List<Integer> listb = new ArrayList<>();
listb.add(2);
listb.add(4);
List<List<Integer>> listc = new ArrayList<>();
listc.add(lista);
listc.add(listb);
System.out.println(listc);
List<Integer> listd = listc.stream().flatMap(ele -> ele.stream()).collect(Collectors.toList());
System.out.println(listd);

運行程序打印信息如下:

[[1, 3], [2, 4]]
[1, 3, 2, 4]

flatMap里面需要傳入一個Function參數(shù),這里根據(jù)需要將數(shù)組轉(zhuǎn)為stream。其實可以直接傳入一個函數(shù)名:Collection::stream,效果是一樣的。

完整代碼如下:

package org.example;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class FlatMapExample {
    public static void main(String[] args) {
        List<Integer> lista = new ArrayList<>();
        lista.add(1);
        lista.add(3);
        List<Integer> listb = new ArrayList<>();
        listb.add(2);
        listb.add(4);
        List<List<Integer>> listc = new ArrayList<>();
        listc.add(lista);
        listc.add(listb);
        System.out.println(listc);
        List<Integer> listd = listc.stream().flatMap(Collection::stream).collect(Collectors.toList());
        System.out.println(listd);
        try {
            Stream<String> stream = Files.lines(Paths.get("test.txt"));
            // stream.forEach(System.out::println);
            List<String> words = stream.flatMap(line -> Stream.of(line.split(" +"))).collect(Collectors.toList());
            System.out.println(words);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

運行截圖:

Stream對象經(jīng)過一次操作之后,內(nèi)容就會被清除,同時流也被關(guān)閉。如果還進行第二次其他操作,那么就會報錯:

stream has already been operated upon or closed 

所以進行流操作,一般都是把所有的流程都以鏈式寫法寫在一起,最后得到結(jié)果。

總結(jié)

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

相關(guān)文章

  • Spring?Boot使用MyBatis進行兩個表的關(guān)聯(lián)

    Spring?Boot使用MyBatis進行兩個表的關(guān)聯(lián)

    本文主要介紹了Spring?Boot使用MyBatis進行兩個表的關(guān)聯(lián),通過實例演示了如何使用MyBatis的XML映射文件和注解實現(xiàn)關(guān)聯(lián)操作,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • JavaFX 監(jiān)聽窗口關(guān)閉事件實例詳解

    JavaFX 監(jiān)聽窗口關(guān)閉事件實例詳解

    這篇文章主要介紹了JavaFX 監(jiān)聽窗口關(guān)閉事件實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • SpringBoot的父級依賴:spring-boot-starter-parent詳解

    SpringBoot的父級依賴:spring-boot-starter-parent詳解

    SpringBoot通過父級依賴spring-boot-starter-parent實現(xiàn)項目快速構(gòu)建,它依賴于spring-boot-dependencies來統(tǒng)一管理項目中的依賴版本,省去了手動指定版本信息的麻煩,這種機制不僅規(guī)定了默認的Java版本和編碼格式
    2024-09-09
  • Spring Boot四大神器之CLI的具體使用

    Spring Boot四大神器之CLI的具體使用

    本文主要介紹了Spring Boot四大神器之CLI的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • java學習指南之字符串與正則表達式

    java學習指南之字符串與正則表達式

    在日常Java后端開發(fā)過程中,免不了對數(shù)據(jù)字段的解析,自然就少不了對字符串的操作,這其中就包含了正則表達式這一塊的內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于java學習指南之字符串與正則表達式的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • SpringBoot @PostConstruct和@PreDestroy的使用說明

    SpringBoot @PostConstruct和@PreDestroy的使用說明

    這篇文章主要介紹了SpringBoot @PostConstruct和@PreDestroy的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • mybatis中${}和#{}的區(qū)別以及底層原理分析

    mybatis中${}和#{}的區(qū)別以及底層原理分析

    這篇文章主要介紹了mybatis中${}和#{}的區(qū)別以及底層原理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • spring cloud gateway網(wǎng)關(guān)路由分配代碼實例解析

    spring cloud gateway網(wǎng)關(guān)路由分配代碼實例解析

    這篇文章主要介紹了spring cloud gateway網(wǎng)關(guān)路由分配代碼實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • java開發(fā)實現(xiàn)五子棋游戲

    java開發(fā)實現(xiàn)五子棋游戲

    這篇文章主要為大家詳細介紹了java開發(fā)實現(xiàn)五子棋游戲,具有雙人對戰(zhàn)和人機對戰(zhàn)功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Mybatis-Plus中updateById方法不能更新空值問題解決

    Mybatis-Plus中updateById方法不能更新空值問題解決

    本文主要介紹了Mybatis-Plus中updateById方法不能更新空值問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08

最新評論

茶陵县| 商丘市| 祥云县| 饶平县| 盐亭县| 武冈市| 大荔县| 梁山县| 屯留县| 类乌齐县| 上林县| 镇赉县| 栾城县| 资阳市| 赣州市| 余庆县| 定日县| 象山县| 安西县| 荃湾区| 翁牛特旗| 湛江市| 康定县| 兴安县| 栖霞市| 潼关县| 阳高县| 景谷| 太和县| 云霄县| 电白县| 封丘县| 桐乡市| 木里| 巴中市| 定安县| 宜丰县| 车险| 六枝特区| 鄂伦春自治旗| 郎溪县|