JDK8新特性详细介绍_第1页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、jdk8新特性详细介绍函数式编程面对对象强调一切皆对象,假如想要做事情,必需要找到对象来做。函数式编程思想强调做什么,而不是怎么做。一般的开启线程/匿名内部类对象runnabletask=newrunnable()overridepublicvoidrun()system.out.println("乌鸦坐飞机");newthread(task).start();更多java相关免费视频教程:java在线教程函数式编程开启线程newthread()-system.out.println("龙卷风摧毁停车场").start();前面的小括号:办法参数,没有参

2、数时就写(),箭头指向后面要做的事情,箭头后面就好比是办法体大括号,代表详细要做的内容。lambda表达式lambda表达式,也可称为闭包,它是推进java8发布的最重要新特性。lambda允许把函数作为一个办法的参数(函数作为参数传递进办法中)。用法lambda表达式可以使代码变的越发简洁紧凑。三要素:参数、箭头、代码格式:(参数类型参数名称)-一些代码用法lambda表达式的前提:必需要有接口并且接口中有且惟独一个抽象办法演示:编写一个cook接口,接口中有一个makefood()办法publicstaticvoidmain(stringargs)method()-system.out.p

3、rintln("闪刀启动!"););privatestaticvoidmethod(cookcook)cook.makefood();lambda表达式省略规章:参数类型可以省略。但是只能同时省略全部参数的类型,或者索性都不省略假如参数有且仅有一个,那么小括号可以省略假如大括号内的语句有且仅有一个,那么无论有没有返回值,return、大括号、分号都可以省略。publicstaticvoidmain(stringargs)method(a,b)-a+b);privatestaticvoidmethod(calculatorcalculator)intresult=calcul

4、ator.sum(1234,9876);system.out.println(result);在new一个接口时,也可以用法lambda表达式来代替匿名内部类runnabletask=()-system.out.println("闪刀启动!");newthread(task).start();函数式接口接口当中有且仅有一个抽象办法,叫做函数式接口。jdk8中新增了注解functionalinterface,用于检测一个接口是否为函数式接口。假如不是函数式接口,编译时会报错。functionalinerface注解是可选的,就算不用这个注解,只要保证接口满足函数式接口的定义要

5、求,也一样是函数式接口。functionalinterfacepublicinterfacemyinterfacevoidmethod();办法引用printerprinter=(str)-system.out.println(str);这段代码事实上可以简写。只要是可推导的,就是可引用的,因此传参其实并没故意义,因此这里其实可以用法办法引用来简写system.out:println从java8开头,引入了一个全新的运算符,办法引用符(两个冒号连着写),所在的表达式就是一个办法引用,办法引用和lambda本质是彻低一样的,目的就是简化lambda表达式的写法。lambda的写法:s-syste

6、m.out.println(s)办法引用写法:system.out:println两种写发彻低等效publicstaticvoidmain(stringargs)method(system.out:println);privatestaticvoidmethod(printerprinter)printer.print("hello");接口default办法接口原来是两个抽象办法,现在需要变成三个抽象办法,这个时候它的实现类也需要实现新的办法。当实现类太多时,操作起来很棘手,jdk之前是用法开闭设计模式:对扩绽开放,对修改关闭。即:创建一个新的接口,继承原有的接口,定义新

7、的办法,但是这样的话,原本的那些实现类并没有新的办法,这时候可以用法接口默认办法。关键字用法default举行修饰,办法需要办法体。这样的办法全部的子类会默认实现(不用自己写),假如想要笼罩重写,也可以在实现类中笼罩重写/*从java8开头,接口当中允许定义default默认办法*修饰符:publicdefault(public可以省略,default不能省略)*/publicinterfacemyinterfacevoidmethod1();voidmethod2();defaultvoidmethodnew()system.out.println("接口默认办法执行")

8、;注重:接口中的default办法相当于是一个新的关键字,和四种修饰符的default并非一个概念。活用default关键字,可以使程序达到多继承的效果。static办法从java8开头,接口当中允许定义静态办法,使用与普通类的静态办法相同。publicinterfaceanimalvoideat();staticanimalgetanimal()returnnewcat();流式操作流式处理给开发者的第一感觉就是让集合操作变得简洁了许多,通常我们需要多行代码才干完成的操作,借助于流式处理可以在一行中实现。比如我们希翼对一个包含整数的集合中筛选出全部的偶数,并将其封装成为一个新的list返回,

9、那么在java8之前,我们需要通过如下代码实现:对于一个nums的集合:listevens=newarraylist();for(finalintegernum:nums)if(num%2=0)evens.add(num);通过java8的流式处理,我们可以将代码简化为:listevens=nums.stream().filter(num-num%2=0).collect(collectors.tolist();先容易说明一下上面这行语句的含义,stream()操作将集合转换成一个流,filter()执行我们自定义的筛选处理,这里是通过lambda表达式筛选出全部偶数,最后我们通过collec

10、t()对结果举行封装处理,并通过collectors.tolist()指定其封装成为一个list集合返回。常用操作案例:/初始化list集合listlist=newarraylist();list.add("测试数据1");list.add("测试数据2");list.add("测试数据3");list.add("测试数据12");/用法λ表达式遍历集合list.foreach(s-system.out.println(s);/结合predicate用法和过滤条件筛选元素predicatecontai

11、n1=n-n.contains("1");predicatecontain2=n-n.contains("2");/按照条件遍历集合list.stream().filter(contain1).foreach(n-system.out.println(n);list.stream().filter(s-contain1.test(s).foreach(s-system.out.println(s);list.stream().filter(contain1.and(contain2).foreach(n-system.out.println(n);list.stream().filter(contain1.or(contain2).foreach(n-system.out.println(n);/将过滤后的元素重新放到一个集合中listnewlist=list.stream().filter(contain1.and(contain2).collect(collectors.tolist();集合中decimal求和bigdecimalsum=list.stream().map(person:get

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论