日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Java8:使用compose和andThen組合函數(shù)

在這篇文章中,我將討論利用 Function 接口提供的兩個組合函數(shù)—— compose 和 andThen 來實現(xiàn)函數(shù)的組合。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),坡頭企業(yè)網(wǎng)站建設(shè),坡頭品牌網(wǎng)站建設(shè),網(wǎng)站定制,坡頭網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,坡頭網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

什么是函數(shù)組合?

首先需要創(chuàng)建一些小的可重用函數(shù),然后將這些小函數(shù)組合為新函數(shù)。

現(xiàn)在,我們怎么利用 compose 和 andThen 方法來完成函數(shù)的組合?

首先,定義兩個簡單的函數(shù)—— times2 和 squared。

 
 
  1. Function times2 = e -> e * 2;
  2. Function squared = e -> e * e;

接下來,使用 compose 和 andThen 將它們連起來。

 
 
  1. times2.compose(squared).apply(4); 
  2. // Returns 32
  3. times2.andThen(squared).apply(4); 
  4. // Returns 64

如你所見,compose 和 andThen 的不同之處是函數(shù)執(zhí)行的順序不同。compose 函數(shù)先執(zhí)行參數(shù),然后執(zhí)行調(diào)用者,而 andThen 先執(zhí)行調(diào)用者,然后再執(zhí)行參數(shù)。

我們開始組合函數(shù)

我們先創(chuàng)建一個示例,演示如何利用這種方式創(chuàng)建可重用的小代碼片段——然后我們以不同的方式組合這些代碼片段。

考慮下面的問題。

有一個文章列表,現(xiàn)在需要根據(jù)不同的需求來過濾這些文章。

首先,我們介紹兩個基本功能—— byAuthor 和 byTag——基于作者和標(biāo)簽來過濾文章。

 
 
  1. BiFunction, List
    > byAuthor =
  2.     (name, articles) -> articles.stream()
  3.         .filter(a -> a.getAuthor().equals(name))
  4.         .collect(Collectors.toList());
  5. BiFunction, List
    > byTag = 
  6.     (tag, articles) -> articles.stream()
  7.         .filter(a -> a.getTags().contains(tag))
  8.         .collect(Collectors.toList());

兩個函數(shù)都是 BiFunction——意味著需要兩個參數(shù)。

byAuthor 接收作者名稱和文章列表兩個參數(shù),返回根據(jù)作者過濾后的文章列表。

byTag 與此相同,接收標(biāo)簽和文章列表兩個參數(shù),返回根據(jù)標(biāo)簽過濾后的文章列表。

由于 BiFunction 接收兩個參數(shù),它只提供 andThen 函數(shù)。你不能將一個函數(shù)的結(jié)果放在一個接收兩個參數(shù)的函數(shù)中,因此沒有 compose 函數(shù)。

繼續(xù),我們還有一個基本功能,需對文章列表從新到舊進行排序,并返回排序后的文章列表。

 
 
  1. Function, List
    > sortByDate = 
  2.     articles -> articles.stream()
  3.         .sorted((x, y) -> y.published().compareTo(x.published()))
  4.         .collect(Collectors.toList());
  5. Function, Optional
    > first = 
  6.     a -> a.stream().findFirst();

現(xiàn)在,我們已經(jīng)有了基本的函數(shù),現(xiàn)在看我們怎么利用這些函數(shù)來組合成新的函數(shù)。

首先,我們組合一個返回最近發(fā)表的文章列表函數(shù)。

 
 
  1. Function, Optional
    > newest = 
  2.     first.compose(sortByDate);

使用 first 這個函數(shù)以及我們之前創(chuàng)建的 sortByDate,我們能創(chuàng)建一個新的函數(shù),該函數(shù)返回給定文章列表的***文章。

我們可以繼續(xù)通過不同的方式混合這些函數(shù),從而可以組合出不同意義的函數(shù),而不需要重復(fù)寫代碼。

找出作者的***文章:

 
 
  1. BiFunction, Optional
    > newestByAuthor = 
  2.     byAuthor.andThen(newest);

或者對某一作者的文章進行排序

 
 
  1. BiFunction, List
    > byAuthorSorted = 
  2.     byAuthor.andThen(sortByDate);

或者你可能不關(guān)心作者,只想根據(jù)你喜歡標(biāo)簽獲取***的文章:

 
 
  1. BiFunction, Optional
    > newestByTag = 
  2.     byTag.andThen(newest);

我想要表達的觀點是:通過 Function 接口及其組合功能,可以創(chuàng)建小的代碼塊,再將其組合來滿足你的需求,這樣可以可以更簡單、更有意思地實現(xiàn) DRY 原則。

就這樣了——利用 compose 和 andThen 來使用簡單的方式組合功能。你也試試吧!


網(wǎng)頁名稱:Java8:使用compose和andThen組合函數(shù)
轉(zhuǎn)載來于:http://www.5511xx.com/article/cddgphh.html