女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

聊一聊Java中的Steam流

OSC開源社區(qū) ? 來源:OSCHINA 社區(qū) ? 2023-07-12 09:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1 引言

在我們的日常編程任務(wù)中,對(duì)于集合的制造和處理是必不可少的。當(dāng)我們需要對(duì)于集合進(jìn)行分組或查找的操作時(shí),需要用迭代器對(duì)于集合進(jìn)行操作,而當(dāng)我們需要處理的數(shù)據(jù)量很大的時(shí)候,為了提高性能,就需要使用到并行處理,這樣的處理方式是很復(fù)雜的。流可以幫助開發(fā)者節(jié)約寶貴的時(shí)間,讓以上的事情變得輕松。

2 流簡介

流到底是什么呢?簡要的定義為 “從支持?jǐn)?shù)據(jù)處理操作的源生成的元素序列”,接下來對(duì)于這個(gè)定義進(jìn)行簡要分析。

2.1 支持?jǐn)?shù)據(jù)處理操作

流的數(shù)據(jù)處理操作和數(shù)據(jù)庫的可以聲明式的指定分組或查找等功能支持類似,和函數(shù)式編程的思想一致,如 filter、map、reduce、find、match、sort 等操作,這些流操作可以串行執(zhí)行,也可以并行執(zhí)行。

2.2 源

流會(huì)使用一個(gè)提供數(shù)據(jù)的源,可以通過三種方式來創(chuàng)建對(duì)象流,一種是由集合對(duì)象創(chuàng)建流:

List list = Arrays.asList(111,222,333);
Stream stream = list.stream();

一種是由數(shù)組創(chuàng)建流:

IntStream stream = Arrays.stream(new int(){111,222,333});

一種是由靜態(tài)方法 Stream.of () 創(chuàng)建流,底層還是 Arrays.stream ():

Stream stream = Stream.of(111, 222, 333);
Stream stream = Stream.of(111, 222, 333); 從有序集合生成流時(shí)會(huì)保留原有的順序。由列表生成的流,其元素順序與列表一致。
還有兩種特殊的流:

空流:Stream.empty ()

無限流:Stream.genarate ()

2.3 元素序列

流也可以和集合一樣訪問包含特定的元素類型的一組有序值,但是它們的主要目的不一樣,集合的主要目的是在于存儲(chǔ)和訪問元素,流的主要目的在于表達(dá)計(jì)算。

3 流的思想

流式思想和生產(chǎn)中的流水線具有異曲同工之妙,很多流模型都會(huì)返回一個(gè)流,這些模型都只負(fù)責(zé)它所需要做的事情,并不需要格外的內(nèi)存空間來存儲(chǔ)處理的結(jié)果。這些流模型可以被鏈接起來形成一個(gè)大的流水線,我們?cè)谶@個(gè)過程中不關(guān)注中間步驟的數(shù)據(jù)被如何處理,只需要使用整個(gè)流水線處理后的結(jié)果。接下來的代碼可以體現(xiàn)這種思想,代碼中以商品為例,我們要篩選出商品中體積大于 200 的前兩個(gè)商品的名字。 首先是商品類的定義:

public class Goods {
    private final String Name;
    private final Integer Volume;

    public Goods(String name, Integer volume) {
        Name = name;
        Volume = volume;
    }
    public String getName() {
        return Name;
    }
    public Integer getVolume() {
        return Volume;
    }
}

接下來是商品集合的定義:

List goods = Arrays.asList(new Goods("土豆",10),
new Goods("冰箱",900),new Goods("辦公椅",300));

接下來獲取我們想要的結(jié)果:

List twofoods = goods.stream()//獲取流
    .filter(goods1 -> goods1.getVolume()>200)//篩選商品體積大于200的
    .map(Goods::getName)//獲取商品名稱
    .limit(2)//篩選頭兩個(gè)商品
    .collect(Collectors.toList());//將結(jié)果保存在list中
這樣看來,通過流來處理我們的特定需求,是不是比使用集合的迭代要方便很多呢?

4 流處理的特性

不存儲(chǔ)數(shù)據(jù)

不會(huì)改變數(shù)據(jù)源

只可被使用一次

這里我們使用一個(gè)測(cè)試類 StreamCharacteristic 來驗(yàn)證流處理的以上特性:

import org.springframework.util.Assert;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class StreamCharacteristic {
    public void test1(){
        List list = Arrays.asList(1,2,2,5,6,9);
        list.stream().distinct();
        System.out.println(list.size());
    }
    public void test2(){
        List list = Arrays.asList("wms", "KA", "5.0");
        Stream stream = list.stream();
        stream.forEach(System.out::println);
        stream.forEach(System.out::println);
    }
}
test1 () 中的結(jié)果為 6,盡管我們對(duì)于 list 對(duì)象所生成的 Stream 流做了去重操作 distinct (),但是不影響數(shù)據(jù)源 list。 test2 () 中調(diào)用了兩次 stream.forEach 方法來打印每一個(gè)單詞,第二次調(diào)用時(shí),拋出了一個(gè) “java.lang.IllegalStateException” 異常:“stream has already been operated upon or closed”。這說明流不存儲(chǔ)數(shù)據(jù),遍歷完后這個(gè)流已經(jīng)被消費(fèi)掉了,而且流不可以重復(fù)使用。

5 流操作與流的使用

將所有的流操作連接起來可以組合成一個(gè)管道,管道有兩類操作:中間操作和終端操作。

StreamAPI 常用的中間操作有:filter,map,limit,sorted,distinct。 StreamAPI 常用的終端操作有:forEach,count,collect。 在使用流的時(shí)候,主要需要三個(gè)要素:一個(gè)用來執(zhí)行查詢的數(shù)據(jù)源,用來形成一條流的流水線的中間操作鏈,一個(gè)能夠執(zhí)行流水線并能生成結(jié)果的終端操作。 下圖展示了流的整個(gè)操作流程:

de254840-1fdc-11ee-962d-dac502259ad0.png

6 總結(jié)

流是從支持?jǐn)?shù)據(jù)處理操作的源生成的元素序列

流的思想類似于生產(chǎn)中的流水線

流不存儲(chǔ)數(shù)據(jù),不改變數(shù)據(jù)源,只能被改變一次

流的操作主要分為中間操作和終端操作兩大類





審核編輯:劉清

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

    關(guān)注

    68

    文章

    19890

    瀏覽量

    235118
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7649

    瀏覽量

    167346
  • JAVA語言
    +關(guān)注

    關(guān)注

    0

    文章

    138

    瀏覽量

    20692

原文標(biāo)題:聊一聊Java中的Steam流

文章出處:【微信號(hào):OSC開源社區(qū),微信公眾號(hào):OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    從焊接角度,設(shè)計(jì)PCB的5個(gè)建議

    完成個(gè)電路板,需要PCB工程師、焊接工藝、焊接工人等諸多環(huán)節(jié)的把控。今天通過定位孔、MARK點(diǎn)、留邊、焊盤過孔、輔助工具這五個(gè)方面從畫板的角度跟大家PCB設(shè)計(jì)。
    的頭像 發(fā)表于 02-06 10:31 ?2245次閱讀
    從焊接角度<b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>,設(shè)計(jì)PCB的5個(gè)建議

    消息隊(duì)列技術(shù)選型的7種消息場(chǎng)景

    我們?cè)谧鱿㈥?duì)列的技術(shù)選型時(shí),往往會(huì)結(jié)合業(yè)務(wù)場(chǎng)景進(jìn)行考慮。今天來消息隊(duì)列可能會(huì)用到的 7 種消息場(chǎng)景。
    的頭像 發(fā)表于 12-09 17:50 ?1714次閱讀
    <b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>消息隊(duì)列技術(shù)選型的7種消息場(chǎng)景

    AltiumFill,Polygon Pour,Plane的區(qū)別和用法

    Fill會(huì)造成短路,為什么還用它呢?來AltiumFill,Polygon Pour,Plane的區(qū)別和用法
    發(fā)表于 04-25 06:29

    stm32的低功耗調(diào)試

    前言:物聯(lián)網(wǎng)的大部分設(shè)備都是電池供電的,設(shè)備本身低功耗對(duì)延長設(shè)備使用至關(guān)重要,今天就實(shí)際調(diào)試總結(jié)stm32的低功耗調(diào)試。1、stm32在運(yùn)行狀態(tài)下的功耗上圖截圖自stm32l15x手冊(cè)
    發(fā)表于 08-11 08:18

    7系列FPGA的供電部分

    前幾篇咱們說了FPGA內(nèi)部邏輯,本篇咱們?cè)倭?b class='flag-5'>一7系列FPGA的供電部分。首先咱們說spartan7系列,通常咱們需要使用以下電源軌:1,VCCINTFPGA內(nèi)部核心電壓。其不損壞FPGA器件的范圍
    發(fā)表于 11-11 09:27

    平衡小車代碼的實(shí)現(xiàn)

    前言今天代碼,只有直立功能的代碼。代碼總體思路給定個(gè)目標(biāo)值,單片機(jī)通過IIC和mpu6050通信,得知數(shù)據(jù)后,根據(jù)角度環(huán)計(jì)算出個(gè)P
    發(fā)表于 01-14 08:29

    FPGA的片內(nèi)資源相關(guān)知識(shí)

    大家好,到了每日學(xué)習(xí)的時(shí)間了。今天我們來FPGA的片內(nèi)資源相關(guān)知識(shí)。 主流的FPGA仍是基于查找表技術(shù)的,已經(jīng)遠(yuǎn)遠(yuǎn)超出了先前版本的基本性能,并且整合了常用功能(如RAM、DCM和DSP)的硬核
    的頭像 發(fā)表于 05-25 14:11 ?9229次閱讀
    <b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>FPGA的片內(nèi)資源相關(guān)知識(shí)

    IIC總線設(shè)計(jì)

    大家好,又到了每日學(xué)習(xí)的時(shí)間了,今天咱們來 IIC 總線設(shè)計(jì)。 、概述: IIC 是Inter-Integrated Circuit的縮寫,發(fā)音為eye-squared cee
    的頭像 發(fā)表于 06-22 10:32 ?9589次閱讀

    小米米2月19日停止服務(wù) 米宣布關(guān)閉服務(wù)器

    v8.8.70 及以上版本支持批量導(dǎo)出。 2010年12月10日,反應(yīng)迅速的小米僅僅用了不到2個(gè)月的時(shí)間,發(fā)布了中國第款模仿kik的產(chǎn)品——米。Kik是款基于手機(jī)通信錄的社交軟件,用戶可以免費(fèi)短信聊天。 2012年5月,
    的頭像 發(fā)表于 01-20 05:43 ?7073次閱讀

    復(fù)活了 能維持多久?

    2021年2月19日,米宣布停服,2021年2月26日,米重新上線。不過這次,米卻是以全新的面貌與大家相見。
    發(fā)表于 03-08 16:32 ?1275次閱讀

    FPGA的彩色轉(zhuǎn)灰度的算法

    大家好,又到了每日學(xué)習(xí)的時(shí)間了,今天我們來FPGA學(xué)習(xí)可以遇到的些算法,今天就
    的頭像 發(fā)表于 04-15 15:47 ?2204次閱讀

    【職場(chǎng)雜談】與嵌入式物聯(lián)網(wǎng)架構(gòu)師幾個(gè)話題

    【職場(chǎng)雜談】與嵌入式物聯(lián)網(wǎng)架構(gòu)師幾個(gè)話題
    的頭像 發(fā)表于 08-23 09:19 ?1708次閱讀
    【職場(chǎng)雜談】與嵌入式物聯(lián)網(wǎng)架構(gòu)師<b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>幾個(gè)話題

    華為云彈性公網(wǎng)IP的那些事兒

    華為云彈性公網(wǎng)IP的那些事兒 如今,企業(yè)上云已成為熱門話題,云可以驅(qū)動(dòng)流程創(chuàng)新和業(yè)務(wù)創(chuàng)新,成為企業(yè)新的利潤增長點(diǎn),被看成是企業(yè)實(shí)現(xiàn)數(shù)字化轉(zhuǎn)型的必經(jīng)之路。彈性公網(wǎng)IP作為種網(wǎng)絡(luò)基
    的頭像 發(fā)表于 11-21 15:20 ?1101次閱讀
    <b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>華為云彈性公網(wǎng)IP的那些事兒

    簡單DPT技術(shù)-double pattern technology

    今天想來簡單DPT技術(shù)-double pattern technology,也就是雙層掩模版技術(shù),在目前先進(jìn)工藝下,這項(xiàng)技術(shù)已經(jīng)應(yīng)用的很普遍了。
    的頭像 發(fā)表于 12-05 14:26 ?3009次閱讀

    芯片設(shè)計(jì)的NDR是什么?

    今天突然想route相關(guān)的問題,講講NDR是什么,我也梳理總結(jié)下我對(duì)NDR的認(rèn)識(shí)。
    的頭像 發(fā)表于 12-06 15:14 ?3214次閱讀