当前位置: 首页 > 科技观察

Lambda在Java开发中的经验分享

时间:2023-03-12 01:44:06 科技观察

1.前言支付SpringBoot1.0.4.RELEASE已经发布,项目的推广也有所提升。越来越多的开发者开始尝试这个新事物。今天胖哥就来分享一下他在这个项目中使用Lambda的心得,希望对大家的学习和工作有所帮助。2、看清本质无论我们面对什么,都要尽可能看清本质。这句话不是什么名人说的,是我中学数学老师说的。他告诉我,遇到一道数学题,不要马上埋头做题,而是先分析一下题中涉及的知识点,这样才能快速理解题意。让我用到此为止。编程也是如此。遇到一个需求,先分析流程,把整个流程抽象出来,然后再填充细节。至于封装微信支付,不行!封装第三方调用。一定是这样的过程:第三方调用的本质过程的抽象是我们解决问题的大前提。有了流程,我们就可以用代码来抽象。按照流程,下面是一个App支付的实现:publicWechatResponseEntityappPay(PayParamspayParams){//消费者要想取回结果只能这样消费.client().withType(WechatPayV3Type.NATIVE,payParams)//BiFunction用于组织参数。function(this::payFunction)//TODO这里可以添加一个Supplier来指定请求客户端//Consumer用于消费结果。consumer(wechatResponseEntity::convert)//执行request.request();returnwechatResponseEntity;}包含两个Lambda,通过注释我们可以清楚的知道这个过程是怎样的。3.Lambda实践那么我们就可以按照上面的流程深入了解细节了。了解如何在实际业务流程中使用Lambda。组织参数组织参数的目的是调用第三方接口,必须满足第三方API的要求。以微信支付APP支付接口为例。它的请求报文大致是这样的:如果我们将微信支付APP支付请求报文的输入参数打包后记录为INPUT,按照上面的接口组织INPUT即可满足微信支付的要求。APP支付接口参数为OUTPUT。那么他们的转换关系其实就是下面的Lambda抽象:INPUT->OUTPUT数学上:Java中对应的Lambda函数是Function。但是在实际开发中,需要根据接口的具体情况做不同的处理。需要介绍请求方式(上图中的POST)和接口端点,记为TYPE。高中的时候我们讲过函数代换法。我认为它可以用在这里。使用:如果我们make:很容易推导出:(TYPE,INPUT)->OUTPUT对应Java中的Lambda函数是调用第三方接口的BiFunction在Java开发中,无论你选择的请求方式是SpringFramework提供的RestTemplate或者response客户端WebClient和OKHttp都可以方便的调用Http接口。也可以抽象出来。无论您使用什么方法,它都提供了一个调用工具。如果我们要使用该工具,我们需要获取它,所以非常适合@FunctionalInterfacepublicinterfaceSupplier{/***Getsaresult.**@returnaresult*inJava/Tget();}Lambda公式为:()->T但是目前SpringBootPayment并没有抽象调用层的打算。如果考虑抽象,则使用Supplier来实现。消费result最后我们都需要消费调用得到的结果,宏观上只能消费一次。对应的Lambda表达式:(T)->{}消费T,没有返回值。就像吃苹果一样,刚吃完是不会有产品的,要不就得吃点‘’。Java中提供了Consumer接口作为Lambda接口进行消费,非常容易理解。但是在SpringBootPayment中,需要将请求结果返回给调用方,也就是需要返回值。当时,我想了很久。在Function和Consumer之间,我最终选择了Consumer,或许是因为它更接近消费的本质。.4.总结支付SpringBoot项目建立了良好的迭代机制。通过今天的分享,希望能帮助大家看清项目中的一些需求的本质,将它们抽象出来,找出它们的串联关系。好了,今天的分享就到这里。我是:小胖哥码农,多多关注分享日常开发的点点滴滴。支付SpringBoot:https://github.com/NotFound403/payment-spring-boot本文转载自微信公众号“码农小胖哥”,可通过以下二维码关注。转载本文请联系码农小胖公众号。