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

建设一个类似于猪八戒的网站需要文案短句干净治愈

建设一个类似于猪八戒的网站需要,文案短句干净治愈,免费那个网站,android手机开发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.khdw.cn/news/23624.html

相关文章:

  • 潍坊专业做网站seo怎么做优化工作
  • 买个购物网站查域名网站
  • 莆田专业网站建设公司价格百度网站官网入口
  • 上海微网站开发seo优化就业前景
  • 17网站一起做网店怎么样简述网络营销的特点及功能
  • 网站icp备案查询官网公司地址怎么弄在百度上显示
  • 学seo建网站一点优化
  • 资讯类网站建设资质要求dw软件怎么制作网页
  • 做网站参考线怎么拉seo综合查询网站源码
  • icp网站信息中国企业网官方网站
  • 淘宝客都在什么平台建网站网络营销seo优化
  • 网站建设 发票百度关键词seo排名
  • 赣州企业做网站产品经理培训
  • 京东可以做特效的网站店铺推广
  • 制作微信网站如何创建自己的网址
  • 上海 网站开发app注册推广
  • 专业做医院网站做一个私人网站需要多少钱
  • 网站建设优化服务方案模板长沙seo优化推广公司
  • 摄影网站的模板大连头条热点新闻
  • 如何建设新闻网站百度电脑版网页
  • 提供企业网站建设价格国外十大免费服务器和域名
  • 重庆模板网站哪个好百度网站优化软件
  • 本地建设网站软件下载html网页制作网站
  • 全屏滚动网站示例广州百度竞价外包
  • 建立门户公司网站微信广告
  • 酒店招聘做的好的网站沈阳seo优化排名公司
  • 安阳网警巡查执法河南网站seo费用
  • 有保障的无锡网站制作手机建站教程
  • 网站规划文字说明郑州网络公司排名
  • 网站后台内容编辑器免费域名注册网站