真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java8中compose和andThen組合函數(shù)如何使用

這篇文章給大家介紹Java 8中compose和andThen組合函數(shù)如何使用,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供康平網(wǎng)站建設(shè)、康平做網(wǎng)站、康平網(wǎng)站設(shè)計(jì)、康平網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、康平企業(yè)網(wǎng)站模板建站服務(wù),10多年康平做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

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

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

現(xiàn)在,我們?cè)趺蠢?compose 和 andThen 方法來完成函數(shù)的組合?

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

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

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

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

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

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

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

考慮下面的問題。

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

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

BiFunction, List
> byAuthor =     (name, articles) -> articles.stream()         .filter(a -> a.getAuthor().equals(name))         .collect(Collectors.toList()); BiFunction, List
> byTag =      (tag, articles) -> articles.stream()         .filter(a -> a.getTags().contains(tag))         .collect(Collectors.toList());

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

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

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

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

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

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

現(xiàn)在,我們已經(jīng)有了基本的函數(shù),現(xiàn)在看我們?cè)趺蠢眠@些函數(shù)來組合成新的函數(shù)。

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

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

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

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

找出作者的***文章:

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

或者對(duì)某一作者的文章進(jìn)行排序

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

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

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

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

關(guān)于Java 8中compose和andThen組合函數(shù)如何使用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


分享題目:Java8中compose和andThen組合函數(shù)如何使用
網(wǎng)頁URL:http://weahome.cn/article/igdpci.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部