那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Stream API原理介紹

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-09-30 15:31 ? 次閱讀

Stream APIJava 8 中最重要的新特性之一,它是處理集合和數(shù)組的一種新方式。它提供了一種簡單、靈活和可讀的方式來處理集合和數(shù)組中的元素,從而使代碼更加簡潔、高效和易于維護(hù)。


1. 原理介紹

Stream API 的核心是 Stream 接口,它表示一組元素的序列,可以按需進(jìn)行計(jì)算。Stream 接口提供了大量的中間操作和終端操作,可以用于過濾、映射、排序、聚合等各種操作。

Stream API 的實(shí)現(xiàn)原理是基于兩個(gè)核心概念:流和操作。

流(Stream)是一個(gè)數(shù)據(jù)序列,它可以由一個(gè)或多個(gè)操作組成。

流的操作可以分為兩類:

  1. 中間操作:是指對流進(jìn)行處理但不產(chǎn)生最終結(jié)果的操作;
  2. 終端操作:是指對流進(jìn)行處理并返回最終結(jié)果的操作。

操作

操作(Operation)是對流進(jìn)行處理的方法,操作可以分為中間操作和終端操作。

Stream API 提供了多種中間操作方法和終端操作方法,常用的中間操作方法包括 filter、map、sorted、distinct、limit 等,

常用的終端操作方法包括 forEach、collect、reduce 等。這些方法可以組合使用,構(gòu)成一個(gè)操作鏈,最終返回一個(gè)最終結(jié)果。

操作鏈的執(zhí)行是惰性求值的,即只有在需要計(jì)算結(jié)果時(shí)才進(jìn)行計(jì)算。這種方式可以避免不必要的計(jì)算,并提高代碼的執(zhí)行效率。

語法介紹

Stream API 的語法基于一組接口和操作符,其中最常用的是 Stream 接口和它的中間操作方法和終端操作方法。以下是 Stream API 的基本語法。

創(chuàng)建 Stream 對象

可以通過集合、數(shù)組、IO 流、生成器等多種方式來創(chuàng)建 Stream 對象。

其中最常用的方式是通過集合創(chuàng)建 Stream 對象,例如:

List< Integer > numbers = Arrays.asList(1, 2, 3, 4, 5);
Stream< Integer > stream = numbers.stream();

中間操作方法

Stream 對象提供了多種中間操作方法,可以對 Stream 對象進(jìn)行過濾、映射、排序、去重、限制等操作,常用方法包括:

  • filter:根據(jù)條件過濾 Stream 對象中的元素。
  • map:將 Stream 對象中的元素映射到新的值。
  • sorted:對 Stream 對象中的元素進(jìn)行排序。
  • distinct:去重 Stream 對象中的元素。
  • limit:限制 Stream 對象中元素的數(shù)量。

例如:

List Integer > numbers = Arrays.asList(1, 2, 3, 4, 5);
List Integer > evenNumbers = numbers.stream()
                                    .filter(n - > n % 2 == 0)
                                    .sorted()
                                    .limit(2)
                                    .collect(Collectors.toList());

這里,首先使用 filter() 方法過濾出所有偶數(shù),然后使用 sorted() 方法將它們排序,使用 limit() 方法限制數(shù)量,最后使用 collect() 方法將它們收集到一個(gè)列表中。

終端操作方法

Stream 對象提供了多種終端操作方法,可以將 Stream 對象轉(zhuǎn)換為集合、數(shù)組、Map 對象,或者進(jìn)行聚合操作,常用方法包括:

  • collect:將 Stream 對象中的元素收集到集合、數(shù)組、Map 對象等中。
  • reduce:對 Stream 對象中的元素進(jìn)行聚合操作。
  • forEach:對 Stream 對象中的元素進(jìn)行遍歷操作。

例如:

List< Integer > numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
                    .reduce(0, (a, b) - > a + b);

這里,使用 reduce() 方法對 Stream 對象中的所有元素進(jìn)行求和操作。

綜上所述,Stream API 的語法非常簡單、直觀,并且非常靈活,可以用于各種不同的編程任務(wù),使得代碼更加簡潔、高效和易于維護(hù)。

優(yōu)缺點(diǎn)

Stream API 它基于函數(shù)式編程思想,提供了一種簡單、靈活、可讀性極高的方式來處理集合和數(shù)組中的元素。

Stream API 的特點(diǎn)和優(yōu)點(diǎn)包括:

  1. 簡潔、高效、易于維護(hù):Stream API 的方法鏈?zhǔn)秸{(diào)用,可以使代碼更加簡潔、易于閱讀和維護(hù)。
  2. 支持并行處理:Stream API 支持對集合和數(shù)組中的元素進(jìn)行并行處理,提高了處理效率。
  3. 支持惰性求值:Stream API 的操作是惰性求值的,只有在需要計(jì)算結(jié)果時(shí)才進(jìn)行計(jì)算,避免了不必要的計(jì)算。
  4. 支持多種數(shù)據(jù)源:Stream API 可以處理多種不同類型的數(shù)據(jù)源,例如集合、數(shù)組、IO 流、生成器等。
  5. 支持多種操作:Stream API 提供了多種中間操作方法和終端操作方法,可以對數(shù)據(jù)進(jìn)行過濾、映射、排序、去重、聚合等操作。
  6. 提高代碼可讀性:Stream API 的方法名和參數(shù)都非常直觀,可以使代碼更加可讀性高。
  7. 可以組合使用:Stream API 的操作可以組合使用,構(gòu)成一個(gè)操作鏈,最終返回一個(gè)最終結(jié)果。

不過,Stream API 也有一些缺點(diǎn),例如學(xué)習(xí)成本較高、性能問題、代碼可讀性問題等。因此,在使用 Stream API 時(shí)需要根據(jù)實(shí)際情況進(jìn)行選擇。

使用示例

以下是一些常見的 Stream API 的用例:

過濾

使用filter()方法根據(jù)指定的條件過濾集合中的元素。例如,以下代碼過濾出一個(gè)整數(shù)列表中的所有偶數(shù):

List Integer > numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
List Integer > evenNumbers = numbers.stream()
                                    .filter(n - > n % 2 == 0)
                                    .collect(Collectors.toList());

映射

使用map()方法將集合中的元素映射到新的值。例如,以下代碼將一個(gè)字符串列表中的每個(gè)字符串轉(zhuǎn)換為大寫:

List String > strings = Arrays.asList("hello", "world");
List String > upperCaseStrings = strings.stream()
                                        .map(String::toUpperCase)
                                        .collect(Collectors.toList());

排序

使用sorted()方法根據(jù)指定的排序方式對集合中的元素進(jìn)行排序。例如,以下代碼將一個(gè)整數(shù)列表按照從小到大的順序排序:

List Integer > numbers = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5);
List Integer > sortedNumbers = numbers.stream()
                                        .sorted()
                                        .collect(Collectors.toList());

聚合

使用reduce()方法對集合中的元素進(jìn)行聚合操作。例如,以下代碼計(jì)算一個(gè)整數(shù)列表中的所有元素的總和:

List< Integer > numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
                    .reduce(0, (a, b) - > a + b);

Stream API 還支持并行處理集合和數(shù)組中的元素,從而提高了處理效率。可以使用parallelStream()方法將一個(gè)集合或數(shù)組轉(zhuǎn)換為一個(gè)并行流,使得處理過程可以在多個(gè)線程上并行執(zhí)行。

總結(jié)

Stream API是Java 8中最重要的新特性之一,它提供了一種簡單、靈活和可讀的方式來處理集合和數(shù)組中的元素,使得代碼更加簡潔、高效和易于維護(hù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8691

    瀏覽量

    151915
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1510

    瀏覽量

    62394
  • 終端
    +關(guān)注

    關(guān)注

    1

    文章

    1152

    瀏覽量

    30003
  • Stream
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    8006
  • 語法
    +關(guān)注

    關(guān)注

    0

    文章

    44

    瀏覽量

    9865
收藏 人收藏

    評論

    相關(guān)推薦

    Stream模塊的基礎(chǔ)用法和進(jìn)階用法

    有用。在本教程中,我們將介紹 Stream 模塊的基礎(chǔ)用法和進(jìn)階用法,并提供示例。 基礎(chǔ)用法 在本節(jié)中,我們將介紹 Stream 模塊的基礎(chǔ)用法,并提供基礎(chǔ)示例。 從 Vec 中創(chuàng)建
    的頭像 發(fā)表于 09-19 15:33 ?1260次閱讀

    Redis Stream應(yīng)用案例

    摘要: Redis Stream Redis最新的大版本5.0已經(jīng)RC1了,其中最重要的Feature莫過于Redis Stream了,關(guān)于Redis Stream的基本使用介紹和設(shè)計(jì)
    發(fā)表于 06-26 17:15

    介紹一下不帶數(shù)據(jù)的Stream—Event

    在SpinalHDL中,Stream的抽象可謂諸多設(shè)計(jì)的核心,今天,一同來看下不帶數(shù)據(jù)的Stream——Event。》不帶數(shù)據(jù)的Stream在邏輯設(shè)計(jì)里,握手信號處處可見,在SpinalHDL里
    發(fā)表于 06-27 16:07

    vc++ api函數(shù) (Windows API大全)

    Windows API大全,本書主要介紹VC++里API函數(shù)及其用法-WindowsAPI Daquan, the book introduces VC Lane API fun
    發(fā)表于 10-14 11:45 ?32次下載

    介紹RAW API接口及應(yīng)用

    RAW API
    的頭像 發(fā)表于 07-05 00:35 ?7545次閱讀

    一探究竟Java 8的Stream API性能

    已經(jīng)對 Stream API 的用法鼓吹夠多了,用起簡潔直觀,但性能到底怎么樣呢?會不會有很高的性能損失?
    的頭像 發(fā)表于 05-04 14:20 ?1708次閱讀
    一探究竟Java 8的<b class='flag-5'>Stream</b> <b class='flag-5'>API</b>性能

    AXI-Stream代碼

    AXI-Stream代碼詳解 AXI4-Stream跟AXI4的區(qū)別在于AXI4-Stream沒有ADDR接口,這樣就不涉及讀寫數(shù)據(jù)的概念了,只有簡單的發(fā)送與接收說法,減少了延時(shí),允許無限制的數(shù)據(jù)
    的頭像 發(fā)表于 11-05 17:40 ?3649次閱讀
    AXI-<b class='flag-5'>Stream</b>代碼

    如何利用Stream API來優(yōu)化Java代碼

    使用Stream API優(yōu)化代碼 Java8的新特性主要是Lambda表達(dá)式和流,當(dāng)流和Lambda表達(dá)式結(jié)合起來一起使用時(shí),因?yàn)榱魃昝魇教幚頂?shù)據(jù)集合的特點(diǎn),可以讓代碼變得簡潔易讀 放大招,流
    的頭像 發(fā)表于 07-26 14:30 ?1338次閱讀

    關(guān)于AXI4-Stream協(xié)議總結(jié)分享

    XI4-Stream跟AXI4的區(qū)別就是AXI4-Stream去除了地址線,這樣就不涉及讀寫數(shù)據(jù)的概念了,只有簡單的發(fā)送與接收說法,減少了延時(shí)。由于AXI4-Stream協(xié)議(amba4_axi4_
    的頭像 發(fā)表于 06-23 10:08 ?2368次閱讀

    AXI4-Stream Video 協(xié)議和AXI_VDMA的IP核介紹

    本文主要介紹關(guān)于AXI4-Stream Video 協(xié)議和AXI_VDMA的IP核相關(guān)內(nèi)容。為后文完成使用帶有HDMI接口的顯示器構(gòu)建圖像視頻顯示的測試工程做準(zhǔn)備。
    的頭像 發(fā)表于 07-03 16:11 ?8542次閱讀

    ARM SMMU Data structures之Stream Table

    incoming transaction的StreamID可以找到一個(gè)STE。SMMU支持兩種Stream table格式,格式由Stream table base registers設(shè)置。
    的頭像 發(fā)表于 05-11 09:22 ?1441次閱讀
    ARM SMMU Data structures之<b class='flag-5'>Stream</b> Table

    淺析Stream里的隱式轉(zhuǎn)換

    Stream、Flow是在電路描述里經(jīng)常用到的對象。
    的頭像 發(fā)表于 05-15 17:36 ?518次閱讀
    淺析<b class='flag-5'>Stream</b>里的隱式轉(zhuǎn)換

    怎么使用Java8的Stream API比較兩個(gè)List的差異呢?

    可以使用Java8的Stream API來比較兩個(gè)List的差異,并取出不同的對象。
    的頭像 發(fā)表于 08-12 11:15 ?2300次閱讀

    Stream的核心概念

    Stream 是 Rust 語言中的一種迭代器,它可以使得我們在處理數(shù)據(jù)時(shí)更加高效、靈活。Stream 不僅可以處理大量數(shù)據(jù),還可以進(jìn)行異步操作,這使得它在處理網(wǎng)絡(luò)請求等 IO 操作時(shí)非常
    的頭像 發(fā)表于 09-19 16:19 ?583次閱讀

    Java的Stream的常用知識

    什么是Stream 生產(chǎn)線 Stream就像處理生產(chǎn)流水線一樣去工作,傳送帶就是Stream的管道,每個(gè)工廠關(guān)注直接的生產(chǎn),將上游產(chǎn)品加工成下游需要的產(chǎn)品。為什么Stream比傳統(tǒng)的處
    的頭像 發(fā)表于 10-11 15:45 ?496次閱讀
    Java的<b class='flag-5'>Stream</b>的常用知識
    百家乐电话投注多少| BB百家乐官网HD| 西游记百家乐娱乐城| 百家乐官网网上玩法| 百家乐作| 爱拼百家乐官网的玩法技巧和规则 | 百家乐破解策略| 澳门百家乐官网下路写法| 大发888娱乐游戏博彩| KK百家乐官网娱乐城| 隆回县| 威尼斯人娱乐城备用网| 博E百百家乐官网的玩法技巧和规则 | 澳门顶级赌场手机在线链接| 罗盘24层| 百家乐官网盛大娱乐城城| 大发888娱乐城 真钱| 太阳城百家乐筹码租| 太阳城百家乐官网优惠| 大发888扑克官方下载| 百家乐单机游戏免费| 百家乐官网庄闲的比例| 网上梭哈| 太阳百家乐娱乐| 百家乐稳赚秘籍| 足球.百家乐官网投注网出租| 全讯网导航| 威尼斯人娱乐平台注册| 永利高百家乐现金网| 百家乐官网算点子打法攻略| 二八杠生死门| 太阳城77娱乐城| 鲨鱼百家乐游戏平台| 赌神网百家乐官网的玩法技巧和规则| 右玉县| 上海德州扑克俱乐部| 伯爵百家乐赌场娱乐网规则| 百家乐官网平注资讯| 百家乐官网喜牛| 百家乐官网微心打法| 十大博彩网|