专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

WebFlux前置知识(一)

  WebFlux也不是一帮人拍脑门突然发明的,它是一个漫长的过程,WebFlux本身在逐步完善,各种配套工具理论也在逐步发展。
  因此当想写WebFlux的时候,发现没法直接从WebFlux本身开始写起,对于很多没有接触过函数式编程的人来说,上来就整WebFlux还是有一些挑战的,想来想去,我觉得还是先来和大家捋一捋JDK8中的一些旧玩意。
  虽然JDK8发布距今已经七八年了,但是相信还是有相当多小伙伴用着JDK8,写着JDK6的代码。所以我们有必要回顾一下JDK8,也算是我们学习WebFlux的一些前置知识。
  好啦,开整吧。1。Lambda表达式的四种写法
  JDK8中引入了Lambda,这个大家都知道,虽然现在JDK都出到16了,但是老实说,项目中的Lambda表达式似乎还是很少有人用。有的团队技术风格激进,可能会见到很多Lambda,但是大部分技术团队还是比较保守的。今天为了学习WebFlux,我们还是先来回顾一下Lambda表达式的几种写法。
  先来说说,如果要用Lambda,必须是只有一个需要强制实现方法的接口,我们可以使用FunctionalInterface注解去标记该接口:FunctionalInterfaceinterfaceICalculator{intsquare(inti);}
  此时如果该接口中有多个空方法,编译期间就会报错。
  现在我们建议尽量将一个接口设计的小一些,这样也满足单一职责原则。
  不过JDK8中引入了default方法,就是自带默认实现的那种,自带默认实现的方法可以有多个,这个并不影响Lambda,并且FunctionalInterface注解也不会去检查默认方法的数量。1。1单个参数的
  如果只是一个参数,那么直接写参数即可,例如如下代码:interfaceICalculator{intsquare(inti);}publicclassLambdaDemo01{publicstaticvoidmain(String〔〕args){ICalculatoriciii;intsquareic。square(5);System。out。println(squaresquare);}}
  当函数只有一个参数的时候,直接写即可,不需要添加()。1。2多个参数
  多个参数的话,就需要写上()了,以SpringSecurity中登录成功的回调为例(不了解SpringSecurity的小伙伴可在公号后台回复ss):。defaultLogoutSuccessHandlerFor((req,resp,auth){resp。setContentType(applicationjson;charsetutf8);MapString,ObjectresultnewHashMap();result。put(status,200);result。put(msg,使用logout1注销成功!);ObjectMapperomnewObjectMapper();Stringsom。writeValueAsString(result);resp。getWriter()。write(s);},newAntPathRequestMatcher(logout1,GET))。defaultLogoutSuccessHandlerFor((req,resp,auth){resp。setContentType(applicationjson;charsetutf8);MapString,ObjectresultnewHashMap();result。put(status,200);result。put(msg,使用logout2注销成功!);ObjectMapperomnewObjectMapper();Stringsom。writeValueAsString(result);resp。getWriter()。write(s);},newAntPathRequestMatcher(logout2,POST))。and()。csrf()。disable();
  这种情况,方法有多个参数,此时使用Lambda表达式就需要加上()。1。3要写参数类型的
  正常来说用Lambda时候不需要写上参数类型,但是如果你需要写,就要加上(),还是上面那个例子,如下:interfaceICalculator{intsquare(inti);}publicclassLambdaDemo01{publicstaticvoidmain(String〔〕args){ICalculatoric(inti)ii;intsquareic。square(5);System。out。println(squaresquare);}}1。4方法体不止一行的
  如果方法体不止一行,需要用上{},如果方法体只有一行,则不需要{},参考上面2、3。2。函数接口
  JDK8中自带了函数式接口,使用起来也非常方便。2。1基本应用
  我们先来看一个简单的例子。
  假设我有一个打招呼的接口SayHello,SayHello接口中只有一个sayHello方法,然后在User类中调用该接口对应的方法,最终用法如下:FunctionalInterfaceinterfaceSayHello{StringsayHello(Stringname);}classUser{privateStringusername;publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this。usernameusername;}publicStringsay(SayHellosayHello){returnsayHello。sayHello(this。username);}}publicclassLambdaDemo02{publicstaticvoidmain(String〔〕args){UserusernewUser();user。setUsername(javaboy);Stringsayuser。say((username)hellousername);System。out。println(saysay);}}
  分析main方法中的调用过程之后,我们发现,在调用时最核心的是如下一行代码:(username)hellousername
  在这段代码中,我们只关心方法的输入和输出,其他的都不是我所考虑的,为了一个简单的输入输出,我还要额外定义一个接口,这显然不太划算。
  JDK8中提供了函数接口,可以帮助我们简化上面的接口定义。如下:classUser2{privateStringusername;publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this。usernameusername;}publicStringsay(FunctionString,StringsayHello){returnsayHello。apply(this。username);}}publicclassLambdaDemo03{publicstaticvoidmain(String〔〕args){User2user2newUser2();user2。setUsername(javaboy);Stringsayuser2。say((username)hellousername);System。out。println(saysay);}}
  可以用FunctionString,String代替我们前面的接口定义,这里有两个泛型,第一个泛型表示接口输入的参数类型,第二个泛型表示接口输出的参数类型,而且大家注意,我们最终main方法中的调用方式是不变的。有了Function函数之后,以后我们就不需要定义一些简单的接口了。
  而且Function函数还支持链式操作,如下:publicclassLambdaDemo03{publicstaticvoidmain(String〔〕args){User2user2newUser2();user2。setUsername(javaboy);FunctionString,Stringfunc(username)hellousername;Stringsayuser2。say(func。andThen(s你好s));System。out。println(saysay);}}2。2其他函数接口
  接下来我们来看看这些函数接口。2。2。1UnaryOperator
  当输入输出类型相同时,可以使用UnaryOperator函数接口,例如我们上面的代码,修改之后如下:classUser2{privateStringusername;publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this。usernameusername;}publicStringsay(UnaryOperatorStringsayHello){returnsayHello。apply(this。username);}}publicclassLambdaDemo03{publicstaticvoidmain(String〔〕args){User2user2newUser2();user2。setUsername(javaboy);UnaryOperatorStringfunc(username)helloousername;Stringsayuser2。say(func);System。out。println(saysay);}}2。2。2Predicate
  Predicate输入一个T类型的参数,输出一个boolean类型的值。
  举一个简单的例子,例如如下代码,我们定义一个List集合中存放着用户姓名,现在要过滤出所有姓张的用户,代码如下:publicclassLambdaDemo04{publicstaticvoidmain(String〔〕args){ListStringnamesArrays。asList(张三,里斯,张五);ListStringlistnames。stream()。filter(ss。startsWith(张))。collect(Collectors。toList());for(Strings:list){System。out。println(ss);}}}
  filter中传入的就是一个Predicate函数接口,这个接口接收String类型的数据,返回一个boolean。
  注意
  一些常用类型的函数接口,JDK中直接提供了相关的类供我们使用,例如Predicate可以用IntPredicate代替;Consumer可以用IntConsumer代替。2。2。3Consumer
  看名字就知道,这个是消费数据,只有输入没有输出。
  例如集合的遍历就可以使用Consumer函数接口。publicclassLambdaDemo04{publicstaticvoidmain(String〔〕args){ListStringnamesArrays。asList(张三,里斯,张五);names。stream()。forEach(sSystem。out。println(s));}}2。2。4Supplier
  Supplier刚好和Consumer相反,它只有输出没有输入。有的时候我们的工厂方法没有输入只有输出,这个时候就可以考虑使用Supplier(如果有输入参数,则可以考虑使用Function函数接口)。SupplierConnectionsupplier(){Connectionconnull;try{conDriverManager。getConnection(,,);}catch(SQLExceptione){e。printStackTrace();}returncon;};Connectionconnectionsupplier。get();3。小结
  其实WebFlux前置知识还是蛮多的,今天先聊这些吧,我们后面继续。
  转载自:江南一点雨
  原文链接:
  https:mp。weixin。qq。comsDiaDtt0nW38RKUqQSNKj4Q

掌趣科技持续拓宽产品赛道多元协同加强市场竞争力日前,伽马数据发布了2021年79月移动游戏报告,除了公布第三季度市场销售相关数据外,还对中国移动游戏各品类发展进行了分析。报告显示2021年79月,流水测算榜TOP10中,10款最终幻想7配置公开,地下城与勇士决斗将上线多平台最终幻想7配置需求公布史克威尔在推特上发布公告宣布了最终幻想7重置版的系统要求,最高可支持4K120FPSHDR输出,Xbox手柄PS手柄以及键鼠进行游玩,预计帧数解锁模组将在后续一朝夺冠天下知!走进北京电竞基地,揭开青春饭的苦与乐几年训练无人问,一朝夺冠天下知。这句话用来概括电竞选手短暂的职业生涯十分贴切。很多电竞选手都是出了大学校门就进入电竞圈,最高领奖台上的奖杯就是唯一的奋斗目标。训练中有激情有疲惫有乏曾在国内风靡一时的韩国射击网游,虽然停服了,但情怀没停亲爱的小伙伴们,大家好,我是你们的大T。当年你玩过多少射击网游呢?除了穿越火线CS和逆战这些游戏外,实际上还有很多当年在国内风靡一时的韩国射击网游,虽然现在已经停服了,但玩过的人,吃鸡低配黄金风衣,别人视角外观shi黄,玩家赶紧退款Hello,小伙伴们大家好,吃鸡趣味多,一说话就多欢迎来到新一期的鹏程去聊吃鸡!相信大家也都知道,现在和平精英上线游戏皮肤的方式开始变得多样化,不仅在游戏中上线游戏皮肤,而且在第三LOL手游新大型赛事来袭,EDGIG等纷纷入场,玩家可免费领皮肤LOL手游上线也有一段时间了,不知道各位现在都已经打到什么段位了呢?经过沉淀之后,不仅英雄联盟手游的玩家已经非常稳定了,而且生态也逐渐完善。在这基础之上,英雄联盟手游的比赛开始如雨热门游戏光环改编经典角色士官长登上海报光环发布海报1905电影网讯日前,据外媒报道,由热门游戏光环改编的真人剧集发布海报,为即将在2022年的上线活动预热。海报上,穿着复合式装甲的士官长提着头盔,出现在神秘的星球上。作当年信白露娜三大野王,唯有李白没机会上赛场,原因在哪?大家好我是指尖,如今的kpl赛场,是新王们的天下,很多远古时期的英雄都没有了上场的机会,被吐槽最多的边路几个战神,好像也只剩了个经久不衰的关羽,而在打野上,当年最火的三大野王,露娜逆战12月14日1。0。1。99版本停服维护公告亲爱的NZer为提供更好的游戏体验,逆战将于2021年12月14日400900停服更新,游戏版本号升级为1。0。1。99,维护期间,欢迎进入逆战官方论坛)参与讨论更新内容以及相关精天命奇御2紫武如何获得?全紫武获取方法分享天命奇御2紫武如何获得?天命奇御2中没有橙色武器,紫武则为最高品质。下面小编就带来天命奇御2全紫武获取方法分享,一起来看看吧。天命奇御2全紫武获取方法分享所有紫色武器取得方式白虎爪马克6元皮肤秒杀,钻石消耗活动开启小伙伴们好呀,今天的峡谷额外的不一样呢?出现了英雄修炼任务,又可以体验某位英雄的大部分皮肤啦,当然啦,这些都不是重点,重点的地方是马可的新皮肤就上线啦,限时拼团6元哦,此外,钻石消
吃鸡鲨鱼自曝心悦5,成盒扣38分后光子电话回复可以安排大家好,欢迎来到由小鱼干开讲的吃鸡新鲜事速报,SS17赛季已经开始比较长一段时间,不知道各位玩家都冲到什么段位了呢?前段时间光子推出了1个不掉分的活动,在周五周六周日,每天都有1次绝地求生2未来之役(最新版本)特色1完成各种各样的任务,将所有的敌人全部击杀,运用自己手中的武器将他全部消灭2在这个游戏中以一个士兵的身份,去不断的,采用第一人称的方式进行操作3所有的战斗场面都非常的精彩刺激,每一王者荣耀34个英雄代表,你认为以上的爱称合适吗?我相信,每个人都有小名,对吧?那是咱们小时候,父母给起的,是爱的称呼,很少有父母会直接喊我们的大名,都是喊小名,这里面包含着爱。既然小名包含着爱,我们为什么不正式地给我们喜欢的王者王者荣耀小乔狼队星元皮肤,首个灰色系特效,大招落队标被吐槽太丑相信小伙伴们都知道王者荣耀最近会有不少新皮肤,但没想到先上线的是小乔狼队星元,赶紧来看看这次星元的效果吧!根据之前的投票,因为狼队的人气最高所以得到了这次出星元皮肤的机会,也是首个收了这套表情包,你就是拥有8倍镜的人了最近有特种兵问鸡仔,为什么M249移出了空投,可以在地图上直接刷新了,但是用的人没有变多呢?鸡仔针对这个问题做了细致的研究,最后发现了一些M249的小秘密!M249现状本以为移出空孩子爱玩王者荣耀,对英雄台词耳熟能详,王者热门台词盘点1。自破碎的奇迹中寻求光明,踏碎希望的苦恼扶摇而上2。以绝望挥剑,着逝者为铠3。擅书者自有风骨,尽一身之力而颂之4。凤兮凤兮归故乡,遨游四海求其凰5。自以为穿越黑暗丛林,而猜疑终究在没有网络的情况下,这些经典游戏,或许可以相伴你的一生假如身处在一个孤岛之上,岛上没人也没有网络信号,一辈子只能玩一款游戏,你会选择哪一款?这个问题听上去有些无厘头,但却是经常会梦到的场景。首先可以排除的是像使命召唤超凡双生隐形守护者王者荣耀女娲新皮肤曝光!6元皮或史诗品质,V7皮肤给到蔡文姬王者荣耀又出新皮肤了,这次终于轮到女娲!虽然还没有官宣,但是很多大V已经爆出海报,而且还可能在下周上线,对此很多玩家都在猜女娲新皮肤的品质是6元皮还是史诗,也有人认为是V7限定皮肤王者荣耀全新组合,靠CP拿新皮肤众多男英雄,只有孙策成功翻身战相信小伙伴们都知道,王者荣耀当中不同英雄的待遇,有一些英雄能获得新皮肤全靠CP,也被大家调侃吃软饭。其中就包括了众多的男英雄,比如最近刚刚出了新皮肤的云中君。云中君自从上线以来最有随想00001最近玩一款手游,氪了1000元左右,度过初期的困难,之后只要花时间把游戏开着,挂在那,时不时操作下就行了!现在是全服38名!这游戏是世界服务器!有使用中文,俄文,英文,韩文的玩家分僵尸类生存游戏死亡之夜页面介绍(随版本更新1。2。3。5)生存末日休闲模拟类电脑游戏随版本更新介绍,欢迎大家关注。英文名NightOfTheDead,可以选择每一晚僵尸都暴动或者僵尸不暴动,类似于七日杀僵尸每七天暴动一次。本游戏steam
友情链接:快好知快生活快百科快传网中准网文好找聚热点快软网