精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網站建設資訊

NEWS

網站建設資訊

基于Java8StreamAPI如何實現數據抽取收集

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

余干網站建設公司創新互聯,余干網站設計制作,有大型網站制作公司豐富經驗。已為余干近1000家提供企業網站建設服務。企業網站搭建\成都外貿網站制作要多少錢,請找那個售后服務好的余干做網站的公司定做!

目標&背景

我們以“處理訂單數據”為例,假設我們的應用是一個分布式應用,有"訂單應用","物流應用","商品應用”等都是獨立的服務。本次我們的目的需要展示訂單列表完整數據:

1.查詢訂單列表。

2.批量查詢物流信息。

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

假設我們定義了一個訂單類,具有幾個關鍵的屬性:訂單號,狀態,訂單價,快遞信息。如下所示:

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

我們定義了一個快遞信息類,幾個關鍵的屬性:訂單號,物流公司,物流單號,物流狀態。如下所示:

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

Java7 實現

獲取訂單列表 & 抽取訂單號

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

這里我們獲取了訂單列表orderList,此時expressInfo里邊是沒有數據的。這里抽取單號依然是Java傳統的寫法。

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

由于我們是通過調用遠程服務來獲取快遞信息,為了減少網絡通信次數,我們采取批量查詢的方式。這也是為什么,上一步中我們要抽取訂單號

下面我們來獲取快遞信息

// 調用遠程服務,
List expressInfos = RpcGetExpressInfoBatch(orderSeqList);
// 組裝 訂單-快遞 關系map
Map orderExpressMap = new HashMap<>();
for(ExpressInfo e: expressInfos){
  orderExpressMap.put(e.getOrderSeq(),e.getStatusInfo());
}

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

組合數據,將快遞信息填充進訂單#

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

至此,我們使用Java7 的寫法,完成了開篇設定的目標。下面我們看Java8的寫法

Java8 實現

獲取訂單列表 & 抽取訂單號#

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

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

這里的::叫“方法應用”,是Java8中的新寫法。

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

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

下面我們仍然是通過遠程調用來獲取快遞信息,然后使用Java8的語法建立一個 訂單-快遞 關聯信息的map。

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

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

至此,訂單數據,訂單-物流關系數據map都得到了,下面我們來組合數據。

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

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

Java有哪些集合類

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

感謝你能夠認真閱讀完這篇文章,希望小編分享的“基于Java8 Stream API如何實現數據抽取收集”這篇文章對大家有幫助,同時也希望大家多多支持創新互聯,關注創新互聯行業資訊頻道,更多相關知識等著你來學習!


網站標題:基于Java8StreamAPI如何實現數據抽取收集
文章網址:http://m.jcarcd.cn/article/pihggd.html
主站蜘蛛池模板: 国产久热精品 | 国产女同| 丝袜视频| 欧美亚洲一区 | 嫖妓国产在线观看 | 欧美整片sss| 国产疯狂女同互磨高 | 日本1区在线观看 | 国产福利片免费看 | 97视频在线| 日本制服丝袜在线 | 国产福利在线观看永 | 国产二三区 | 91丨九 | www国产精品 | 国产精选在线播放 | 成人深夜影院 | 乱伦免费国产精品 | 91夫妻在线| 精品成人免费 | 国产综合8| 国产黄频视频免费 | 欧美三级a做 | 成人午夜| 国产91色综 | 日本区在线观看 | 国产又猛又黄 | 91热爆| 欧美一区二区 | 99视频导航网站 | 国产自拍 | 国产绿帽在 | 日韩免费网页版视频 | 欧美一级黄带 | 国产无吗 | 国产成视频 | 国产日产一区二 | 蜜臀国产在线视频 | 国产精品专区六区 | 国产精品偷伦视频免 | 中文字幕亚洲精品 |