成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Lambda在Java開發中的實際運用經驗分享

開發 后端
Payment Spring Boot 1.0.4.RELEASE已經發布,在項目的推廣上也有了起色,越來越多的開發者開始嘗試這個新東西。今天胖哥來分享一下這個項目中Lambda的使用心得,希望對你的學習和工作有所幫助。

[[377318]]

1. 前言

Payment Spring Boot 1.0.4.RELEASE已經發布,在項目的推廣上也有了起色,越來越多的開發者開始嘗試這個新東西。今天胖哥來分享一下這個項目中Lambda的使用心得,希望對你的學習和工作有所幫助。

2. 看清本質

無論面對任何事,我們都要盡可能的看清其本質。

這句話不是什么名人大家說的,而是我中學的數學老師。他告訴我遇到數學題,不要立即埋頭去做,先要分析這道題所涉及的知識點,這樣才能快速領會這道題的立意。讓我受用至今。

編程也是一樣,遇到一個需求,先分析流程,把整個流程抽象化,然后再去填充細節。

就封裝微信支付來說,不!封裝第三方調用來說。一定是下面的流程:

第三方調用的本質

 

流程的抽象是我們解決問題的大前提。有了流程我們就能用代碼進行抽象了。根據流程下面是 App 支付的一個實現:

  1. public WechatResponseEntity<ObjectNode> appPay(PayParams payParams) { 
  2.     // Consumer 如果要拿到結果返回只能通過這種方式消費 有點類似 setter 
  3.     WechatResponseEntity<ObjectNode> wechatResponseEntity = new WechatResponseEntity<>(); 
  4.     this.client().withType(WechatPayV3Type.NATIVE, payParams) 
  5.             //BiFunction 用來組織參數 
  6.             .function(this::payFunction) 
  7.             //TODO 這里可以增加一個Supplier 來指定請求的客戶端 
  8.             //Consumer 用來消費結果 
  9.             .consumer(wechatResponseEntity::convert
  10.             //執行請求 
  11.             .request(); 
  12.     return wechatResponseEntity; 

包含了兩個Lambda,通過注釋我們能夠非常明確地知道流程是怎么樣的。

3. Lambda 的實踐

接著我們就可以根據上面的流程來進行深入了解細節了。看看如何在實際業務流程中來運用Lambda。

組織參數

組織參數目的就是為了第三方接口的調用,而且都要符合第三方 API 的要求。拿微信支付 APP 支付接口來舉個例子,它的請求報文大致是這樣的:

微信支付APP支付請求報文

 

如果我們記我們封裝后調用的入參為INPUT,將INPUT按照上述接口進行組織滿足微信 APP 支付接口的參數為OUTPUT。那么它們的轉換關系其實就是下面的一個Lambda抽象:

  1. INPUT -> OUTPUT 

數學上為:

對應Java中的Lambda函數是Function<INPUT>。

但是在實際開發中需要根據接口的具體情況做不同的處理,需要引入包含請求方法(上圖中的POST)和接口端點,記作TYPE,高中我們講過函數替代法,我覺得這里可以用一用:

如果我們令 :

很容易推導出:

  1. (TYPE,INPUT) -> OUTPUT 

對應Java中的Lambda函數是BiFunction

調用第三方接口

在Java開發中,無論你選擇的請求方式是Spring Framework提供的RestTemplate或者反應式客戶端WebClient,或者OKHttp都可以很方便地調用 Http 接口。也可以抽象,不管你用什么方法都是提供了一個調用工具,我們要拿工具來用就要get,因此非常適合Java中的

  1. @FunctionalInterface 
  2. public interface Supplier<T> { 
  3.  
  4.     /** 
  5.      * Gets a result. 
  6.      * 
  7.      * @return a result 
  8.      */ 
  9.     T get(); 

Lambda式子為:

  1. () -> T 

不過目前Payment Spring Boot對于調用層還沒有抽象的打算,如果考慮到抽象一定會用Supplier去實現。

消費結果

最終我們都需要對調用獲取的結果進行消費,宏觀上只能消費一次。對應的Lambda式子:

  1. (T) -> {} 

對T進行消費是沒有返回值的。就像吃一個蘋果,吃完之后是不會立即有產物的,否則你要趕緊吃點 💊。

Java中提供了Consumer接口來作為消費的Lambda接口,非常容易理解。

但是在Payment Spring Boot中對請求結果是需要返回給調用端的,也就是需要返回值的,當時我考慮了很久,在Function和Consumer之間,最終還是選擇了Consumer,或許就是它更接近消費的本質。

4. 總結

Payment Spring Boot項目目前已經建立了一個良好的迭代機制,通過今天的分享,希望能幫助你看透項目中的一些需求的本質,抽象它們,找出它們的串聯關系。好了今天的分享就到這里,我是:碼農小胖哥,多多關注,分享日常開發中的點點滴滴。

 

Payment Spring Boot: https://github.com/NotFound403/payment-spring-boot

本文轉載自微信公眾號「 碼農小胖哥」,可以通過以下二維碼關注。轉載本文請聯系 碼農小胖哥公眾號。

 

責任編輯:武曉燕 來源: 碼農小胖哥
相關推薦

2009-08-07 10:00:00

在Eclipse中安裝

2018-11-06 10:51:07

Redis開發存儲系統

2011-07-05 18:23:23

java

2023-08-29 07:42:21

離線數倉實時數倉

2011-08-22 15:47:27

Oracle臨時表存儲過程

2011-06-14 09:27:43

高性能WEB開發

2011-07-07 10:49:41

JavaScript

2011-10-09 14:23:02

開發

2010-01-07 15:29:59

VB.NET表達式

2010-08-10 11:04:19

部署SCOMWindows Ser

2010-02-02 13:15:00

C++ lambda函

2010-08-20 13:45:43

DB2數據庫

2018-05-07 15:28:45

項目開發管理

2011-05-16 09:30:30

jQueryWCF

2011-07-08 15:20:30

seamjsf

2010-01-14 18:14:22

VB.NET開發特點

2012-12-27 10:05:15

2013-04-28 13:52:05

app

2011-04-25 16:56:34

Greedy Bank游戲開發獨立開發者

2025-01-15 07:00:00

Java代碼Lambda
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本免费在线观看视频 | 成人久久久| 国产剧情一区 | 欧美在线观看网站 | 欧美黄色精品 | 国产成人叼嘿视频在线观看 | 一区二区三区四区免费在线观看 | 久久手机视频 | 中文在线а√在线8 | 国产精品久久久久久av公交车 | 91大神在线资源观看无广告 | 国产香蕉视频在线播放 | 在线免费观看黄色 | av网站在线看 | 亚洲91精品 | 久久久久午夜 | 中文字幕亚洲专区 | 亚洲一区二区三区四区五区中文 | 欧美日韩三级在线观看 | 国产精品成人69xxx免费视频 | 中文字幕国产一区 | 91九色porny首页最多播放 | 波波电影院一区二区三区 | www.99久久.com | 国产精品美女久久久久久久久久久 | 在线免费观看a级片 | 91成人在线视频 | 中文字幕 亚洲一区 | 亚州综合一区 | 国产一区2区 | 九色91视频 | 日韩成人在线看 | 人和拘一级毛片c | 中文字幕在线观看av | 中文字幕一区在线观看视频 | 91社区视频| 亚洲一区二区不卡在线观看 | 97caoporn国产免费人人 | 草久在线视频 | 天天爽天天干 | 成人综合一区二区 |