成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

基于Java8StreamAPI如何實(shí)現(xiàn)數(shù)據(jù)抽取收集-創(chuàng)新互聯(lián)

這篇文章主要介紹了基于Java8 Stream API如何實(shí)現(xiàn)數(shù)據(jù)抽取收集,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了平湖免費(fèi)建站歡迎大家使用!

目標(biāo)&背景

我們以“處理訂單數(shù)據(jù)”為例,假設(shè)我們的應(yīng)用是一個(gè)分布式應(yīng)用,有"訂單應(yīng)用","物流應(yīng)用","商品應(yīng)用”等都是獨(dú)立的服務(wù)。本次我們的目的需要展示訂單列表完整數(shù)據(jù):

1.查詢訂單列表。

2.批量查詢物流信息。

3.將物流信息填充到訂單主信息中。

假設(shè)我們定義了一個(gè)訂單類,具有幾個(gè)關(guān)鍵的屬性:訂單號(hào),狀態(tài),訂單價(jià),快遞信息。如下所示:

class Order{
  String orderSeq;
  String status;
  double totalPrice;
  String expressInfo;
  // 省略get,set及hashCode等方法
}

我們定義了一個(gè)快遞信息類,幾個(gè)關(guān)鍵的屬性:訂單號(hào),物流公司,物流單號(hào),物流狀態(tài)。如下所示:

class ExpressInfo{
  String orderSeq;
  String expressName;
  String expressNo;
  String createTime;
  String statusInfo;
  // 省略get,set及hashCode等方法
}

Java7 實(shí)現(xiàn)

獲取訂單列表 & 抽取訂單號(hào)

  List<Order> orderList = getOrderList();
  // 抽取 訂單號(hào)
  List<String> orderSeqList = new ArrayList<>();
  for (Order order : orderList) {
    orderSeqList.add(order.getOrderSeq());
  }

這里我們獲取了訂單列表orderList,此時(shí)expressInfo里邊是沒有數(shù)據(jù)的。這里抽取單號(hào)依然是Java傳統(tǒng)的寫法。

批量查詢快遞信息 & 組裝 訂單-快遞信息 map

由于我們是通過調(diào)用遠(yuǎn)程服務(wù)來獲取快遞信息,為了減少網(wǎng)絡(luò)通信次數(shù),我們采取批量查詢的方式。這也是為什么,上一步中我們要抽取訂單號(hào)

下面我們來獲取快遞信息

// 調(diào)用遠(yuǎn)程服務(wù),
List<ExpressInfo> expressInfos = RpcGetExpressInfoBatch(orderSeqList);
// 組裝 訂單-快遞 關(guān)系map
Map<String,String> orderExpressMap = new HashMap<>();
for(ExpressInfo e: expressInfos){
  orderExpressMap.put(e.getOrderSeq(),e.getStatusInfo());
}

這里組裝map,也依然是Java7常用的寫法。

組合數(shù)據(jù),將快遞信息填充進(jìn)訂單#

for(Order order:orderList){
  String expressInfo = orderExpressMap.get(order.getOrderSeq());
  order.setExpressInfo(expressInfo);
}

至此,我們使用Java7 的寫法,完成了開篇設(shè)定的目標(biāo)。下面我們看Java8的寫法

Java8 實(shí)現(xiàn)

獲取訂單列表 & 抽取訂單號(hào)#

// 獲取列表
List<Order> orderList = getOrderList();
// 抽取單號(hào)
List<String> orderSeqs = orderList.stream()
    .map(Order::getOrderSeq)
    .collect(Collectors.toList());

這里我們使用了stream.map,在map()中,我們的寫法是Order::getOrderSeq表示調(diào)用Order對(duì)象的getOrderSeq()方法來抽取訂單號(hào)。

這里的::叫“方法應(yīng)用”,是Java8中的新寫法。

在map()后面緊跟的是collect收集器,他將抽取的數(shù)據(jù)toList(),于是我們得到了最終的List。

批量查詢快遞信息 & 組裝 訂單-快遞信息 map

下面我們?nèi)匀皇峭ㄟ^遠(yuǎn)程調(diào)用來獲取快遞信息,然后使用Java8的語法建立一個(gè) 訂單-快遞 關(guān)聯(lián)信息的map。

List<ExpressInfo> expressInfos = RpcGetExpressInfoBatch(orderSeqList);
Map<String,String> orderExpressMap =expressInfos.stream()
    .collect(Collectors.toMap(ExpressInfo::getOrderSeq,ExpressInfo::getStatusInfo));

這里代碼比Java7的要少吧,且一目了然,這里用strean().collect來收集數(shù)據(jù),收集成什么形式呢?看名知意,Collectors.toMap收集成Map,收集什么數(shù)據(jù)呢?toMap()中,寫了ExpressInfo::getOrderSeq及ExpressInfo::getStatusInfo,即:抽取orderSeq作為key,statusInfo作為value。

至此,訂單數(shù)據(jù),訂單-物流關(guān)系數(shù)據(jù)map都得到了,下面我們來組合數(shù)據(jù)。

組合數(shù)據(jù),將快遞信息填充進(jìn)訂單#
經(jīng)過上面啰嗦的兩步,我們得到了符合我們要求的數(shù)據(jù),現(xiàn)在我們需要根據(jù)顏值高低進(jìn)行排名,代碼如下:

orderList.stream().forEach(o -> o.setExpressInfo(orderExpressMap.get(o.getOrderSeq())));

Java有哪些集合類

Java中的集合主要分為四類:1、List列表:有序的,可重復(fù)的;2、Queue隊(duì)列:有序,可重復(fù)的;3、Set集合:不可重復(fù);4、Map映射:無序,鍵唯一,值不唯一。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“基于Java8 Stream API如何實(shí)現(xiàn)數(shù)據(jù)抽取收集”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)建站,關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站jinyejixie.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

本文名稱:基于Java8StreamAPI如何實(shí)現(xiàn)數(shù)據(jù)抽取收集-創(chuàng)新互聯(lián)
URL分享:http://jinyejixie.com/article24/dehjce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、品牌網(wǎng)站制作、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)公司網(wǎng)站維護(hù)、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
黎平县| 连城县| 科技| 大渡口区| 虎林市| 随州市| 保德县| 商水县| 禹州市| 溧阳市| 翁牛特旗| 太和县| 绥芬河市| 博野县| 思茅市| 福建省| 甘肃省| 双鸭山市| 行唐县| 来凤县| 宜宾市| 洮南市| 天柱县| 彭阳县| 乌鲁木齐县| 霍城县| 西华县| 都匀市| 普格县| 阿荣旗| 汨罗市| 夹江县| 延津县| 正阳县| 马公市| 佛教| 金昌市| 团风县| 枞阳县| 河北省| 昂仁县|