软弱和无知不是生存的障碍,傲慢才是。——《三体》什么是Lambda表达式Lambda表达式是一种表达传递匿名函数的简洁方式。Lambda表达式没有名称,但有一个参数列表、一个函数体、一个返回类型,可能还有一个可抛出的异常列表。这是Java8的一个新特性。有了它,我们再也不用像以前那样写一堆繁琐的匿名类代码了。让我们先体验一下。对比匿名函数,我们举个例子。有这样一个表示口罩的类:packageone.more.study;/***mask*/publicclassMask{/***brand*/privateStringbrand;/***类型*/私有字符串类型;publicStringgetBrand(){返回品牌;}publicvoidsetBrand(Stringbrand){this.brand=brand;}publicStringgetType(){返回类型;}publicvoidsetType(Stringtype){this.type=type;}}创建另一个掩码列表并添加一些掩码对象:ListmaskList=newArrayList<>();maskList.add(newMask("3M","KN95"));maskList.add(newMask("3M","FFP2"));maskList.add(newMask("Honeywell","KN95"));maskList.add(newMask("Honeywell","N95"));现在我们按品牌对口罩列表进行排序。在Java8之前,我们可以使用匿名函数来实现:maskList.sort(newComparator(){@Overridepublicintcompare(Masko1,??Masko2){returno1.getBrand().compareTo(o2.getBrand());}});让我们再次使用Lambda表达式:maskList.sort((Masko1,??Masko2)->o1.getBrand().compareTo(o2.getBrand()));显然,使用Lambda表达式后的公式,代码看起来更加清晰简洁。如果您仍然感到困惑,那也没关系。在这里我只想炫耀一下Lambda表达式的牛逼。接下来,我会一点一点地详细解释。Lambda表达式的组成Lambda表达式由三部分组成。以上面的mask排序例子为例,如下图所示:参数列表:本例中为两个Mask对象的参数,使用的是Comparator接口中compare方法的参数。.箭头:->将参数列表和参数体分成两部分。正文:在此示例中,用于比较面膜品牌的表达式作为Lambda表达式返回。body可以改成另一种写法,意思是一样的:maskList.sort((Masko1,??Masko2)->{returno1.getBrand().compareTo(o2.getBrand());});Lambda表达式基本语法从上面例子的两种写法可以看出,Lambda表达式有两种基本语法,分别是:(参数列表)->表达式(参数列表)->{多语句}只看这两个干巴巴的语法,很难理解,但真正的知识来自于实践。让我们再举几个例子。Lambda表达式例子在我们提到的例子中,Lambda表达式的参数列表有两个Mask类型的参数,主体是比较两个Mask对象的品牌,返回的是一个int类型。当body是表达式时,不需要return语句,隐式返回表达式的返回值。(Masko1,??Masko2)->o1.getBrand().compareTo(o2.getBrand())参数列表中只有一个Mask类型的参数,返回的是String类型,即Mask对象的品牌信息。(Maskmask)->mask.getBrand()参数列表中只有一个Mask类型的参数,返回的是一个boolean类型,表示Mask对象的类型是否为N95。(Maskmask)->mask.getType()=="N95"参数列表中没有参数,返回一个int类型。()->996参数列表中有两个int类型的参数,但是没有返回值(void)。正文中可以写多条语句,但记得用{和}包裹起来。(intx,inty)->{System.out.println("万茂学院想告诉你:");System.out.println("第一个参数为:"+x);System.out.println("第二个参数为:"+y);System.out.println("两个数之和为:"+(x+y));}小测试看了这么多例子,是不是?卷起袖子准备大干一场?别着急,为了检验真知灼见,我们先来做个简单的测试。以下哪些lambda表达式是正确的?()->{}()->"万茂学院"()->{"万茂学院"}()->{return"万茂学院";}()->return"万茂学院"学社";请想一想....公布答案:1、2、4正确,3、5错误。下面一一分析:()->{}:正确,此Lambda表达式无参数,无返回值()->《万猫学院》:正确,此Lambda表达式无参数,body为表达式,返回类型为String。()->{“万茂学院”}:错误,“万茂学院”是表达式,不是语句,不能用{和}包裹,可以改为()->“万茂学院社会”。()->{return"万茂学院";}:正确,这个Lambda表达式没有参数,body是一个语句,用{和}包裹起来,返回String类型。()->返回“万茂学院”;:错误,返回“万茂学院”;是语句,不是表达式,必须用{和}包裹,可以修改为()->{return"万茂社";}.如果你答对了,恭喜你,你已经基本掌握了Lambda表达式的基本语法;如果你答错了,没关系,再读一遍,复习巩固。学习的路上,我与你并肩前行。