当前位置: 首页 > news >正文

网站建设项目实施计划书网站建设销售是什么

网站建设项目实施计划书,网站建设销售是什么,建设网站必须用dns,中山网站关键词排名持续更新中#xff1a; 函数式(Functional)接口 什么是函数式(Functional)接口 只包含一个抽象方法的接口#xff0c;称为函数式接口。 你可以通过 Lambda 表达式来创建该接口的对象。#xff08;若 Lambda 表达式 抛出一个受检异常(即#xff1a;非运行时异常)#xff0c…持续更新中 函数式(Functional)接口 什么是函数式(Functional)接口 只包含一个抽象方法的接口称为函数式接口。 你可以通过 Lambda 表达式来创建该接口的对象。若 Lambda 表达式 抛出一个受检异常(即非运行时异常)那么该异常需要在目标接口的抽 象方法上进行声明。 我们可以在一个接口上使用 FunctionalInterface 注解这样做可以检 查它是否是一个函数式接口。同时 javadoc 也会包含一条声明说明这个 接口是一个函数式接口。 在java.util.function包下定义了Java 8 的丰富的函数式接口: package com.ly.frauddataplatform.luoyan;//TODO: 需要在接口上定义FunctionalInterface注解,表示这是一个函数式的接口 //TODO: MyFuncR,T这里是标明泛型 FunctionalInterface public interface MyFuncR,T {/*** Author luoyan* Description: 函数式编程* Date 2024/3/4 20:42* param t: 入参,泛型可以传任何类型* return R: 返回参数,泛型可以传任何类型**/R getValue(T t); } 这里是自定义的函数式编程的自定义的实现接口方式 //TODO: 这里自定义一个方法,这个方法可以实现前置通知,后置通知,可以在调用方法的前后做一些公用的操作.//TODO: 在调用到自己的实现方法中的时候,去设计实现自己所需要的代码逻辑流程./*** Author luoyan* Description: 封装的方法,泛型中R,T:这个是声明泛型,R:返回的类型,也可以修改R为String,T为String.那么入参和出现就必须是String的类型.* Date 2024/3/4 20:46 * param myFunc: 这个是函数方法* param name: 入参* return R**/public R,T R toUpDate(MyFuncR, T myFunc, T name){System.out.println(前置通知);//TODO: 调用自己设定订代码逻辑流程.R value myFunc.getValue(name);System.out.println(value);System.out.println(后置通知);return myFunc.getValue(name);}//TODO: 使用一个方法进行测试.Testpublic void testDemoOne(){//TODO: 这里实现自己的代码逻辑.//TODO: 这里name是T,也就是入参,1231是R,也就是出参,可以自己随意定义,因为是泛型.String s toUpDate(str - {System.out.println(str);return 1231;}, true);System.out.println(s);}Predicate函数接口 PredicateInteger predicate n -{if (n 4){return true;}return false; };PredicateInteger and predicate.and(k - {if (k 6) {return true;}return false; }).or(t - {if (t 10) {return true;}return false; }); boolean test1 and.test(5); System.out.println(test1);这里使用Function接口来实现。此接口的特点有入参有出参可以直接很好的使用。还有其他的函数。 比如只需要入参不需要出参可以根据自己的情况而定。 举一个例子 比如我们要使用前置要做的事情然后调用方法自己的逻辑最后在执行一个后置要做的事情其中前置流程和后置流程都是共有的流程。那么就可以使用函数式的变成去封装方法然后每个地方都可以直接调用。这样很方便。 如果没有函数式编程我们可能会想到反射的方式传入一个类一个方法然后通过反射的方式去调用这个类中的某个方法从而可以达到这种实现但是太麻烦了。 目前我们需要对于redis进行上锁然后解锁中间是走自己的流程那么我们就可以使用函数式编程 package com.elong.fraud.rcenginedataconvert.constants;import com.elong.fraud.rcenginedataconvert.model.dto.TryLockParamData; import com.ly.tcbase.cacheclient.CacheClientHA; import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils;import javax.annotation.Resource; import java.util.UUID; import java.util.function.Function;/*** Author luoyan* Description: redis锁* Date 2024年01月18日 10:38* Version: V1.0*/ Component public class RedissionTemplate {Resourceprivate CacheClientHA cacheClientHa;/*** Author luoyan* Description:* Date 2024/1/19 15:15* param tryLockParamData: 入参值.* LockKey:key,* param:请求参数* param consumer: FunctionT,R * T:入参,* R:返回参数* return R**/public R R tryLock(TryLockParamData tryLockParamData, FunctionObject,R consumer){//TODO: 前置通知对于参数进行校验String lockKey tryLockParamData.getLockKey();if (ObjectUtils.isEmpty(lockKey)){return null;}//TODO: 前置通知进行上锁String lockVal UUID.randomUUID().toString();Boolean lock cacheClientHa.String().setnx(lockKey, 60L, lockVal);try {long millis System.currentTimeMillis();while (!lock) {//等待锁释放try {if (System.currentTimeMillis() - millis 3000) {throw new RuntimeException(程序异常,未获取锁);}Thread.sleep(100);} catch (Exception ignore) {}lock cacheClientHa.String().setnx(lockKey, 60L, lockVal);}//TODO: 这里去调用自己的代码流程return consumer.apply(tryLockParamData.getParam());}finally {//TODO: 后置通知去进行解锁。if (lockVal.equals(cacheClientHa.String().setcas(lockKey, lockVal, lockVal))) {cacheClientHa.Key().del(lockKey);}}} }第一处调用 private JSONObject saveOrUpdateOriginData(JSONObject newValue, String uniqueId, String sourceName) {//分布式锁String lockKey String.format(RedisCacheConstants.DATA_SOURCE_DETAIL_LOCK_FORMAT, sourceName, uniqueId);//TODO:new TryLockParamData(lockKey)入参。逗号后面就是函数方法也就是自己的代码逻辑。JSONObject newValReturn redissionTemplate.tryLock(new TryLockParamData(lockKey), consumer - {//TODO: 自己的代码逻辑流程先上锁然后走这里的代码逻辑流程最后进行解锁。return newVal;});return newValReturn null ? new JSONObject() : newValReturn; }第二处调用 //分布式锁 String lockKey String.format(RedisCacheConstants.FEATURE_LIST_UPDATE_LOCK_FORMAT, uniqueId); //TODO:new TryLockParamData(lockKey)入参。逗号后面就是函数方法也就是自己的代码逻辑。 redissionTemplate.tryLock(new TryLockParamData(lockKey), rLock - {//TODO: 自己的代码逻辑流程先上锁然后走这里的代码逻辑流程最后进行解锁。//先执行更新更新失败执行插入int update dcdbFraudMapper.update(origin.getTableName(), fieldList, StrUtil.toUnderlineCase(origin.getUpdateKey()), uniqueId);if (update 0) {boolean insert dcdbFraudMapper.insert(origin.getTableName(), fieldList);}return null; });可以看到上面两处的调用使用函数式编程非常方便且代码也很美观不用其他的方式就能够快速的实现对于同事的阅读和理解也是非常快速的。
http://www.pierceye.com/news/91287/

相关文章:

  • 水文化建设网站网站排名优化公司哪家好
  • 网站图片的暗纹是怎么做的做家教中介 不建网站怎么做
  • 学校网站建设价格明细表淮安网站网站建设
  • 怎样做代刷网站长电子商务网站开发费用入账
  • 网站健设推广产品多少钱商业网站开发的实训小结怎么写
  • 优秀的网站建设推荐做百度推广是网站好还是阿里好
  • 响应式网站开发费用做不规则几何图形的网站
  • 西安网站建设优化集团门户网站建设不足
  • 深圳建网站的公企业做网站有什么用
  • wordpress插件 2017南宁seo排名外包
  • 在淘宝上开网店的详细步骤丹东网站seo
  • 网站建设外包公司招聘发帖子有哪些app平台
  • 网站风格发展趋势快设计
  • 稳定的网络建站咨询电话正规网站建设咨询电话
  • 请人代做谷歌外贸网站做购彩网站是怎么盈利的
  • 网站内链怎么删除wordpress如何下载
  • 深圳网站公司有了域名搭建网站详细步骤
  • 主机宝 建设网站怎么知道网站哪家公司做的
  • 1元做网站方案城乡建设住房建设厅官方网
  • 厦门网站网页设网页素材html
  • 活字格能开发企业网站吗商品门户网站解决方案
  • 网站虚拟主机内存不足能不能链接美工怎么做网站效果图
  • 网站版建设软件开发培训班有哪些
  • 舟山市城市建设档案馆网站武夷山景区网站建设特点
  • 北京建设工程质量总站网站哈尔滨网站只做
  • 做外单网站有哪些网站开发工程师需要什么技术
  • 跨境电商自己做网站引流会宁县建设局网站
  • 对于学校网站建设的建议google推广公司哪家好
  • 国外做装饰画的网站公司logo设计图片欣赏
  • 宿州外贸网站建设公司工信部资质查询网站