范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

WebFlux前置知识(二)

  上篇文章和小伙伴们聊了 Lambda 表达式和函数接口,今天我们一起来看下 方法引用、变量引用、类型推断以及级联表达式四个点,也算是 WebFlux 的一个前置知识点。
  废话不多说,开整。  1 方法引用
  到今天,方法引用估计很多小伙伴可能多多少少都见过,即使自己没写过,可能也看别人写过。用过的小伙伴可能会感觉这个用着真爽,cool!没用过的小伙伴可能就要吐槽这什么鬼代码。
  不管怎么样,我们今天还是来看看方法引用,也算是我们学习 WebFlux 的一个前置知识。  1.1 什么是方法引用
  什么是方法引用?
  简单说,方法引用就是一个 Lambda 表达式,操作符就是  :: ,有的小伙伴们可能会觉得所谓的 Lambda 就是 ->  代替匿名内部类,其实不然!Lambda 中包含的东西还是蛮多的,方法引用就算是其中之一。
  有的时候,我们使用 Lambda,需要自己写方法的实现,但是有的时候,我们可能不需要自己写方法的实现,就是单纯的调用一下方法,这种时候,通过方法名称来调用,会更加清晰,可读性更高,也更加简洁易懂。
  方法引用不仅可以用来访问类或者实例中已经存在的方法,也可以用来访问构造方法。  2.2 四种方法引用2.2.1 静态方法引用
  例如我定义一个 Lambda,该 Lambda 中有一个方法可以完成对数字格式的转换,如下:  public class LambdaDemo05 {     public static void main(String[] args) {         Function func = a -> String.valueOf(a);         String s = func.apply(99);         System.out.println("s = " + s);     } }
  在上面的这个 Function 中,我们将一个 Integer 类型数字转为了一个字符串,由于在 Lambda 中并没有其他代码,就是一个简单的类型转换,因为我们可以将之简写成如下方式:  public class LambdaDemo05 {     public static void main(String[] args) {         Function func = String::valueOf;         String s = func.apply(99);         System.out.println("s = " + s);     } }
  类似的,比如我们有一个 Consumer,如下:  Consumer consumer = s -> System.out.println(s); consumer.accept("javaboy");
  Consumer 消费一个字符串,消费的方式就是控制台打印,这种时候我们可以简写成如下方式:  Consumer consumer = System.out::println; consumer.accept("javaboy");
  这就是静态方法引用。
  再举个例子,用 Lambda 写一个给参数求次幂的函数,如下:  BiFunction func = (a, b) -> Math.pow(a, b); Double result = func.apply(3, 4); System.out.println("result = " + result);
  传入两个参数类型都是 Integer,返回的数据类型是 Double,调用 Math.pow 计算次幂。
  上面这段代码我们也可以通过静态方法引用简化:  BiFunction func = Math::pow; Double result = func.apply(3, 4); System.out.println("result = " + result); 2.2.2 实例方法引用
  方法引用也可以用在实例方法上。  Random random = new Random(); IntUnaryOperator func = i -> random.nextInt(i); Integer r = func.applyAsInt(10); System.out.println("r = " + r);
  这段代码也可以使用方法引用,方式如下:  Random random = new Random(); IntUnaryOperator func = random::nextInt; Integer r = func.applyAsInt(10); System.out.println("r = " + r);
  就是把类换成实例而已,其他都是一样的。
  不过需要注意的是,字符串的实例稍微特殊一些,如下一个字符串排序方法:  String[] stringArray = {"Barbara", "Mary", "James"}; Arrays.sort(stringArray,String.CASE_INSENSITIVE_ORDER); System.out.println(Arrays.toString(stringArray));
  如果使用方法引用,方式如下:  String[] stringArray = {"Barbara", "Mary", "James"}; Arrays.sort(stringArray, String::compareToIgnoreCase); System.out.println(Arrays.toString(stringArray));
  这个感觉有点像静态方法引用,其实不是的,Lambda 的第一个参数会成为调用实例方法的对象。
  在实例方法引用中,如果需要指定泛型,泛型放在  ::  后面。 2.2.3 构造方法引用
  例如如下方法提供一个 Cat 实例:  Supplier supplier = () -> new Cat(); Cat cat = supplier.get();
  通过方法引用,可以简写成如下形式:  Supplier supplier = Cat::new; Cat cat = supplier.get(); 2.2.4 数组构造方法引用
  例如创建一个长度为 10 的数组,如下:  IntFunction func = (i) -> new int[i]; int[] arr = func.apply(10); System.out.println("arr.length = " + arr.length);
  使用构造方法引用,可以简写成如下方式:  IntFunction func = int[]::new; int[] arr = func.apply(10); System.out.println("arr.length = " + arr.length); 3. 变量引用
  内部类中使用外部定义的变量,需要这个变量是一个 final 类型的,如果用了 Lambda 表达式,这个规则依然适用。
  如下;  String s = "javaboy"; Consumer consumer = s1 -> System.out.println(s1 + s); consumer.accept("hello ");
  此时虽然不用给 s 变量添加 final 标记,但是它实际上已经是 final 类型的了,如果强行修改,就会报错:
  4. 类型推断
  大部分情况下,Lambda 表达式都是可以推断出自己的类型的,个别情况下可能推断不出,比如出现方法重载的时候,这个时候可能就需要我们类型强转了,例如如下代码:  @FunctionalInterface interface ICalculator2{     int add(int a, int b); } @FunctionalInterface interface ICalculator3{     int multiply(int a, int b); } public class LambdaDemo06 {     public static void main(String[] args) {         calculator((ICalculator2) (a, b) -> a + b);     }      public static void calculator(ICalculator2 iCalculator) {     }     public static void calculator(ICalculator3 iCalculator) {     } }
  上面的代码中定义了两个计算器 ICalculator2 和 ICalculator3,然后有一个重载的方法分别用到了 ICalculator2 和 ICalculator3,这就导致在使用 Lambda 表达式时无法推断出到底使用哪个对象,此时我们就需要显式的进行类型强转。  5. 级联表达式
  Lambda 表达式也可以写成 N 多层,具体则看需求。
  例如三个数相加,可以写成如下形式:  Function>> func = x -> y -> z -> x + y + z; Integer i = func.apply(3).apply(4).apply(5); System.out.println("i = " + i);
  这个表达式从右往左看可能容易理解。
  z->x+y+z  对应的是 IntFunction 。
  z->x+y+z  整体作为返回,y 作为输入,对应的是 Function 。
  y -> z -> x + y + z  整体作为返回,x 作为输入,对应的就是 Function> 。
  that"s all。
  原文链接:https://mp.weixin.qq.com/s/QZYcQFJDxTw0V-E0DTNOIw

剑侠情缘五行玩法!剑网1归来万人大服明日开启倒计时1天!剑侠情缘网络版复刻手游剑网1归来全平台不删档测试明日10月15日1000即将来袭!今日预下载已经火爆开启!(图1剑网1归来预下载开启)剑网1归来手游将剑侠情缘IP的经典新玩法新英雄!魔法门之英雄无敌王朝双周年版本来袭10月12日,史诗魔幻战争策略手游魔法门之英雄无敌王朝双周年全新版本即将震撼开启!备受领主们喜爱的大型GVG玩法王权之眼,将会迎来全面的革新升级,加之神秘红品新英雄的降临,必将再度宋金战场VS风陵渡船!剑网1归来千人热血帮战玩法由西山居原班人马潜心打造的剑网1归来全平台不删档测试将于10月15日1000正式开启!作为剑侠情缘网络版复刻手游,剑网1归来在美术玩法等方面原汁原味复刻经典,让我们的重回最初美好的五侠战江湖!剑侠世界3全门派群像视频曝光五侠聚首,共战江湖!西山居新一代剑侠情缘手游剑侠世界3五大门派分别对应传统五行学说中的金木水火土五大属性,不仅门派造型各具风韵,技能特色更是各有千秋!今日,剑侠世界3五门派群像视频SW过人技巧教学街头篮球摇摆人进阶指导上一期我们介绍了街头篮球中摇摆人SW这个职业,这一期将会为大家带来摇摆人进阶指导,SW的过人技巧,让我们一起来了解下吧!SW的A人基础到如何连A首先先让大家看看成品,这里所有展示的新一代剑侠觉醒!剑侠世界3iOS不付费删档测试定档9月西山居新一代剑侠情缘手游剑侠世界3iOS不付费删档测试正式定档9月!经典剑侠情缘IP传承,回归初心带你重燃当年激情匠心打磨游戏品质,只为呈现一个动感武侠真江湖!更热血的战斗玩法更有忘年之交侠客风云传OL少侠携手老前辈江湖中,总有德高望重的老前辈,令世人敬仰,后浪中,总有初生牛犊不怕虎的少年侠客,续写武林新篇章,在侠客风云传OL中,最令人闻风丧胆的长者,莫过于阎罗,将他人生死握于掌间,不怒自威,花嫁礼服今夏梦幻来袭英魂之刃口袋版罗刹郡主新皮肤上线佼佼青衣玉带珠花,少女初嫁颦笑嫣然。8月20日,英魂之刃口袋版热门射手罗刹郡主全新皮肤月咏花嫁即将梦幻登场!我们的开团能手蚩尤魔神也将同步上线新皮肤狂怒灾灵,化身成为暗黑盔甲风的地一人之下街头篮球觉醒妮妮角色正式曝光最近大家一定被灌篮高手刷屏了,相信大家一定和临时工一样,超级期待明年秋季动画电影的上映,一起回忆已经逝去的青春!本周为大家带来的是街头篮球国庆节版本觉醒角色妮妮的爆料,她是大财团家镇派之宝,再现江湖!天龙3D全新版本今日上线抱朴守真映大千,镇器百年出天然。千雕万琢夺目色,碧波盈盈笼寒烟。天龙3D全新版本镇派之宝火热来袭,新资料片将于今日隆重上线!镇派之宝功能震撼开启!宝石收集功能万众瞩目,福利聚集阶段爆料来了雷云风暴,电子跃迁!异界泰坦电魂离子聚变传说,电魂是神秘之域的最强力量,它是闪电的化身,能向着周围的所有物体释放着无穷的电能。没有人知道它来自何方,要归往何处。强大的雷电力量始终充斥在它的周围。非自然的生命赋予了它强大能
老风尘的玩儿日记(壹贰壹)一王国纪元首充玫瑰骑士2022年1月5日星期三北京晴这两天王国纪元玩的有点上头,但是电脑端确实不大方便,上班或者休息的时候还好,要是出去的话,就不能及时更新采集或者建筑升级了,这几天随着等级的提升,随便王者荣耀有一说一且不吹不黑,坦克英雄和防装其实都不弱好吧哈喽大家好,我是铃铛儿经常会听到不少玩家在帮坦克英雄苦弱,或者在说防装特别没用,不如纯输出和对手拼伤害,哪怕是坦克英雄都纯输出和对手比拼伤害。说实话每当看到这些,其实铃铛儿就会思考2022年LPL春季赛A级战队盘点RNG和LNG,针对性补强2022年LPL春季常规赛开赛时间已经确认,将于1月10日正式开赛,而在农历新年到来之前,LPL春季赛将进行两周半的比赛,并且没有一个休赛日,这对于想要在春季赛取得好成绩的战队来说索尼新专利减少玩家玩新游戏时的挫败感一项关于玩家辅导系统的SIE专利现已公布。这项专利于去年6月提交给美国专利商标局,但直到去年12月30日才公布,它涵盖了指导用户玩游戏的系统和方法。这种方法能够识别出玩家在游戏过程大话手游2021年12月30日停机维护内容重要内容1。跨年音乐会!福利送不停!元旦1月1日2000,大话西游20周年跨年音乐会直播即将开启侠士们可前往游戏内直播大厅观看。观看直播,有机会抽取大话金条bose音响Airpod崔斯特瑞姆的黑化事件将于2022年1月4日回归暗黑破坏神的周年纪念日即将到来,同时还有崔斯特瑞姆的黑化事件!无论你是渴望怀旧的暗黑系列老鸟,还是第一次体验这个系列过往历史的新人,这份一年一度对暗黑破坏神早期游戏的热爱与致敬都是如何看待氪金玩家与平民玩家?自从游戏行业快速发展以后,如今的网络游戏犹如春笋般一一冒出,如今的网络游戏也成为了不少网友生活中的一部分,一些喜爱游戏的网友能够在游戏里面体会到只有游戏才能带来的乐趣。然而游戏终究王者年限,黎明之约不知不觉,打王者已经六年了。时间流逝,王者即将推出第二款年限皮肤,就是雅典娜的黎明之约。只需要这个赛年四个王者印记,就可以免费领取雅典娜的黎明之约。建模上来说,还是不错的非常的帅气武则天限免结束,倪克斯开始涨价,六款限定下架,两款面临绝版不知道玩家是否有过注意,前几天的游戏里面,其实官方是开启了全英雄限免活动的,而这个全英雄中,是直接包括了武则天这名英雄。而相信知晓活动的玩家,应该是用武则天这名英雄在游戏里面体验了僵尸毁灭工程出门带什么工具好?外出工具携带推荐分享僵尸毁灭工程出门带什么工具好?僵尸毁灭工程游戏中玩家不免需要去外面探索物资,很多小伙伴不清楚自己出去要带什么,今天为大家带来了僵尸毁灭工程外出工具携带推荐分享,一起来看看吧。僵尸毁张大仙直播毒奶表情狰狞?原因竟是挑战者杯XYG与宿敌再相逢随着2021年王者荣耀KPL秋季赛的落幕,对于各位王者荣耀玩家来说进入了没有高水平比赛可以看的一个境地。往年还有冬季冠军杯的比赛,不过今年这项赛事也没有了,取而代之的是挑战者杯的比