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

小学的门户网站建设b2b平台推广

小学的门户网站建设,b2b平台推广,淄博做网站推广哪家好,网站的友情连接怎么做1. 什么是Lambda表达式? Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达…

1. 什么是Lambda表达式?

Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

2. 什么是函数式接口?为什么需要函数式接口?

  • 只包含一个抽象方法(Single Abstract Method,简称SAM)的接口,称为函数式接口。当然该接口可以包含其他非抽象方法。
  • 你可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda 表达式抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明)。
  • 我们可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口。同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口。
  • java.util.function包下定义了Java 8 的丰富的函数式接口

3. Lambda表达式本质

Java中Lambda表达式其实就是创建实例对象的另一种方式,但是它比较特殊,比较简洁,并且创建的是一个匿名对象(万物皆对象!)。

从下边示例代码可以看出,Lambda表达式只是对抽象方法进行了重写,具体的输入是由最终的调用者决定的。只要输入相同,输出就一定相同。

函数式接口:

@FunctionInterface //声明该接口为函数式接口
public interface FunctionInterfaceTest<T>{...void method(T t); // 只能有一个抽象方法
}

Lambda表达式:

// 左边是接口,右边是对抽象方法的重写
FunctionInterfaceTest m = (t)-> System.out.println(t);// 调用
m.method(11); //输出11

4. 如何理解函数式接口?

Java从诞生日起就是一直倡导“一切皆对象”,在Java里面面向对象(OOP)编程是一切。但是随着python、scala等语言的兴起和新技术的挑战,Java不得不做出调整以便支持更加广泛的技术要求,即Java不但可以支持OOP还可以支持OOF(面向函数编程)

  • Java8引入了Lambda表达式之后,Java也开始支持函数式编程。
  • Lambda表达式不是Java最早使用的。目前C++,C#,Python,Scala等均支持Lambda表达式。

面向对象思想:

  • 做一件事情,找到一个能解决这件事情去的对象,调用对象的方法,完成事情。

函数式编程思想:

  • 只要能获得结果,谁去做的、怎么做的都不重要,重视的是结果,不是过程。

在函数式编程语言当中,函数被当做一等公民对待。在将函数作为一等公民的编程语言中,Lambda表达式的类型是函数。但是在Java8中,有所不同。在Java8中,Lambda表达式是对象,而不是函数,它们必须依附于一类特别的对象类型——函数式接口。

简单的说,在Java8中,Lambda表达式就是一个函数式接口的实例。这就是Lambda表达式和函数式接口的关系。也就是说,只要一个对象是函数式接口的实例,那么该对象就可以用Lambda表达式来表示。

5. 语法格式

接口<泛型> 引用 = (形参列表) -> { 方法体 }

  • 引用左边是接口,引用右边的Lambda是对接口中抽象方法的重写
  • ->的左边:Lambda形参列表,对应抽象方法的形参列表
  • ->的右边:Lambda体,对应重写的抽象方法的方法体

调用:引用.抽象方法(实参);,这里调用的是被重写的抽象方法。

因为Lambda表达式是对抽象方法的重写,因而一定要要先了解被重写的抽象方法是如何定义的。

语法格式一:无参,无返回值

@Test
public void test1(){//未使用Lambda表达式Runnable r1 = new Runnable() {@Overridepublic void run() {System.out.println("我爱北京天安门");}};r1.run();System.out.println("***********************");//使用Lambda表达式Runnable r2 = () -> {System.out.println("我爱北京故宫");};r2.run();
}

语法格式二:Lambda 需要一个参数,但是没有返回值。

@Test
public void test2(){//未使用Lambda表达式Consumer<String> con = new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}};con.accept("谎言和誓言的区别是什么?");System.out.println("*******************");//使用Lambda表达式Consumer<String> con1 = (String s) -> {System.out.println(s);};con1.accept("一个是听得人当真了,一个是说的人当真了");}

语法格式三:数据类型可以省略,因为可由编译器推断得出,称为“类型推断”

Lambda 表达式中的参数类型都是由编译器推断得出的。Lambda 表达式中无需指定类型,程序依然可以编译,这是因为 javac 根据程序的上下文,在后台推断出了参数的类型。Lambda 表达式的类型依赖于上下文环境,是由编译器推断出来的。这就是所谓的“类型推断”。

@Test
public void test3(){//语法格式三使用前Consumer<String> con1 = (String s) -> {System.out.println(s);};con1.accept("一个是听得人当真了,一个是说的人当真了");System.out.println("*******************");//语法格式三使用后,形参类型可由接口泛型 推断出来Consumer<String> con2 = (s) -> {System.out.println(s);};con2.accept("一个是听得人当真了,一个是说的人当真了");}

语法格式四:Lambda 若只需要一个参数时,参数的小括号可以省略

@Test
public void test4(){//语法格式四使用前Consumer<String> con1 = (s) -> {System.out.println(s);};con1.accept("一个是听得人当真了,一个是说的人当真了");System.out.println("*******************");//语法格式四使用后Consumer<String> con2 = s -> {System.out.println(s);};con2.accept("一个是听得人当真了,一个是说的人当真了");}

语法格式五:Lambda 需要两个或以上的参数,多条执行语句,并且可以有返回值

@Test
public void test5(){//语法格式五使用前Comparator<Integer> com1 = new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {System.out.println(o1);System.out.println(o2);return o1.compareTo(o2);}};System.out.println(com1.compare(12,21));System.out.println("*****************************");//语法格式五使用后Comparator<Integer> com2 = (o1,o2) -> {System.out.println(o1);System.out.println(o2);return o1.compareTo(o2);};System.out.println(com2.compare(12,6));}

语法格式六:当 Lambda 体只有一条语句时,return 与大括号若有,都可以省略

@Test
public void test6(){//语法格式六使用前Comparator<Integer> com1 = (o1,o2) -> {return o1.compareTo(o2);};System.out.println(com1.compare(12,6));System.out.println("*****************************");//语法格式六使用后Comparator<Integer> com2 = (o1,o2) -> o1.compareTo(o2);System.out.println(com2.compare(12,21));}@Test
public void test7(){//语法格式六使用前Consumer<String> con1 = s -> {System.out.println(s);};con1.accept("一个是听得人当真了,一个是说的人当真了");System.out.println("*****************************");//语法格式六使用后Consumer<String> con2 = s -> System.out.println(s);con2.accept("一个是听得人当真了,一个是说的人当真了");}

6. Java内置的四大核心函数式接口

接口功能类型接口抽象方法描述
消费型接口Consumervoid accept(T t)负责逻辑处理,没有返回值
供给型接口SupplierT get()不需要参数,有返回值
函数型接口Function<T,R>R apply(T t)接收一个参数,并返回指定类型数据
判断型接口Predicateboolean test(T t)接收一个参数,返回布尔值
http://www.yidumall.com/news/23561.html

相关文章:

  • 大连专业零基础网站建设教学培训seo技术培训中心
  • 东庄水利建设公司网站西安百度推广竞价托管
  • 自己来建网站seo关键词优化排名公司
  • 外包网站建设如何做关键词优化
  • 做网站如何防止被骗发免费广告电话号码
  • 做企业网站服务商杭州网站建设方案优化
  • 企慕网站建设网络推广网络营销策划书模板
  • 东莞疫情高峰期是几号西安seo培训机构
  • 吉林市建设厅网站网站友链查询接口
  • 短视频素材网站免费大推荐广州seo服务外包
  • 建设专业网站百度数据查询
  • 济南网站建设群智能营销系统开发
  • 怎么做漫画网站外贸网站推广软件
  • 大连网站建设讯息免费网站制作教程
  • php模板网站自助建站
  • 朝阳公司做网站百度地图疫情实时动态
  • 有限公司和股份有限公司的区别成都网站关键词推广优化
  • 铁岭市网站建设公司百度如何推广广告
  • wordpress笑话模板关键词优化推广公司排名
  • 可以用 我爱乳房做网站名不云南省最新疫情情况
  • 常德网站建设哪家快西安seo排名扣费
  • 网站建设用户调查百度广告收费表
  • 遵义新蓝外国语学校网站建设电脑系统优化软件排行榜
  • 网站建设公司小江域名注册查询系统
  • 如何制作建筑公司网站企业网站排名优化价格
  • 国企建筑单位招聘信息生哥seo博客
  • 单页网站制作教程网站备案信息查询
  • 网站建设开发教程视频教程北京软件培训机构前十名
  • 上海 设计网站建设seo 优化思路
  • 怎么建设网站运城手机百度如何发布广告