




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JDK8新特性Oracle2014年3月发布了Java8正式版,它是java的一个里程牌版本,带来了诸多新特性。官网介绍:
一、针对java编程语言(JavaProgrammingLanguage)二、针对集合(Collections)三、CompactProfiles四、安全性五、JavaFX六工具(tools)七、国际化八、部署九、Date-TimePackage
十、ScriptingJDK8新特性Oracle2014年3月发布了Java8正1
java编程语言
(JavaProgrammingLanguage)
1:lambda表达式:一种新的语言特性,能够把函数作为方法的参数或将代码作为数据。lambda表达式使你在表示函数接口(具有单个方法的接口)的实例更加紧凑。2.方法引用是lambda表达式的一个简化写法,所引用的方法其实是lambda表达式的方法体实现,这样使代码更容易阅读
3.默认方法:Java8引入defaultmethod,或者叫virtualextensionmethod,目的是为了让接口可以事后添加新方法而无需强迫所有实现该接口的类都提供新方法的实现。也就是说它的主要使用场景可能会涉及代码演进。4.重复注解:允许在同一声明或类型(类,属性,或方法)的使用中多次使用同一个注解5.改善了类型推断6.方法参数反射
java编程语言
(JavaProgrammingLa2函数式接口Java8引入的一个核心概念是函数式接口(FunctionalInterfaces)。接口定义个唯一一个抽象方法,那么这个接口就成为函数式接口。同时,引入了一个新的注解:@FunctionalInterface。可以把他它放在一个接口前,表示这个接口是一个函数式接口。这个注解是非必须的,只要接口只包含一个方法的接口,虚拟机会自动判断,不过最好在接口上使用注解@FunctionalInterface进行声明。@FunctionalInterfacepublicinterfaceRunnable{
publicabstractvoidrun();}函数式接口Java8引入的一个核心概念是函数式接口(F3Lambda表达式函数式接口的重要属性是:我们能够使用Lambda实例化它们,Lambda表达式实例化函数接口作为方法参数,或者将代码作为数据对待。在Java8之前:匿名内部类,监听器和事件处理器的使用都显得很冗长,代码可读性很差。在Java8:Lambda表达式的应用则使代码变得更加紧凑,可读性增强;
Lambda表达式使并行操作大集合变得很方便,可以充分发挥多核CPU的优势,更易于为多核处理器编写代码;Lambda表达式由三个部分组成:第一部分为一个括号内用逗号分隔的形式参数,参数是函数式接口里面方法的参数;第二部分为一个箭头符号:->;第三部分为方法体,可以是表达式和代码块。语法如下:
1.方法体为表达式,该表达式的值作为返回值返回。
(parameters)->expression
2.方法体为代码块,必须用{}来包裹起来,且需要一个return返回值,但若函数式接口里面方法返回值是void,则无需返回值。
Lambda表达式函数式接口的重要属性是:我们能够使用La4Lambda和匿名内部类匿名表示法button.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
System.out.print(“这是内部类的表示法!");
}
});Lambada表示法button.addActionListener(
(ActionEvente)->
System.out.print("HellloLambdainactionPerformed")
);
Lambda和匿名内部类匿名表示法5Lambda举例//类型声明MathOperation<Integer,Integer>addition=(Integera,Integerb)->a+b;//不用类型声明MathOperation<Integer,Integer>subtraction=(a,b)->a-b;//大括号中的返回语句MathOperation<Long,Long>multiplication=(a,b)->{returna*b;};//没有大括号及返回语句MathOperation<Float,Float>division=(Floata,Floatb)->a/b;System.out.println("10+5="+tester.operate(10,5,addition));Lambda举例//类型声明6方法引用是lambda表达式的一个简化写法,所引用的方法其实是lambda表达式的方法体实现:List<String>names=Arrays.asList("zhangsan","lisi","wangwu","zhaoliu");Collections.sort(names,String::compareTo);Function<Integer,String>f1=String::valueOf;
Function<String,String>function=String::new;Supplier<String>supplier=String::new;方法引用是lambda表达式的一个简化写法,所引用的方法其实7默认方法Java8引入defaultmethod,或者叫virtualextensionmethod,目的是为了让接口可以添加新方法的实现,而无需强迫所有实现该接口的类都提供新方法的实现。比中:publicinterfaceMyInterface{ defaultvoidmyMethod(){
System.out.println("MyInterface");
}}默认方法Java8引入defaultmethod,或者叫8重复注解重复注解:允许在同一声明或类型(类,属性,或方法)的使用中多次使用同一个注解@Repeatable(Authorities.class)public@interfaceAuthority{
Stringrole();
}public@interfaceAuthorities{Authority[]value();}publicclassRepeatAnnotationUseNewVersion{@Authority(role="Admin")@Authority(role="Manager")publicvoiddoSomeThing(){}}重复注解重复注解:允许在同一声明或类型(类,属性,或方法)的9泛型的推断改进
jdk1.5:List<Apple>box=newArrayList<Apple>();Jdk1.7:List<Apple>box=newArrayList<>();Jdk1.8:List<String>list=newArrayList<>();list.addAll(newArrayList<>());//由于addAll期望获得Collection<?extendsString>类型的参数,JDK8可以根据声明的类型自动判断。//lambda表达式的推断MathOperation<Integer,Integer>subtraction=(a,b)->a-b;泛型的推断改进jdk1.5:List<Apple>b10Stream介绍提供了新包java.util.stream,这个包提供了StreamAPI功能,支持以函数风格(functional-style)去处理流中的元素。在CollectionsAPI中已经整合了StreamAPI,可以在集合上进行批量操作(bulkoperations),如顺序或并行的map-reduce转换。
StreamAPI提供了一种操作大数据的接口,让数据操作更容易和更快。它具有过滤、映射以及减少遍历数等方法,这些方法分两种:中间方法和终端方法,“流”抽象天生就该是持续的,中间方法永远返回的是Stream,因此如果我们要获取最终结果的话,必须使用终点操作才能收集流产生的最终结果Stream介绍提供了新包java.util.stream,11Sream概念Stream不是集合元素,也不是数据结构,它相当于一个高级版本的Iterator,不可以重复遍历里面的数据,像水一样,流过了就一去不复返。它和普通的Iterator不同的是,它可以并行遍历,普通的Iterator只能是串行,在一个线程中执行。操作包括:中间操作和最终操作(只能操作一遍)
串行流操作在一个线程中依次完成。并行流在多个线程中完成,主要利用了JDK7的Fork/Join框架来拆分任务和加速处理。相比串行流,并行流可以很大程度提高程序的效率Sream概念Stream不是集合元素,也不是数据结构,12流的种类流有串行和并行两种,串行流上的操作是在一个线程中依次完成,而并行流则是在多个线程上同时执行。并行与串行的流可以相互切换:通过stream.sequential()返回串行的流,通过stream.parallel()返回并行的流。相比较串行的流,并行的流可以很大程度上提高程序的执行效率。下面是分别用串行和并行的方式对集合进行排序。list.stream().sequential()).sorted().count();流的种类流有串行和并行两种,串行流上的操作是在一个线程中依次13流的操作分类:中间中间操作:Intermediate主要是用来对Stream做出相应转换及限制流,实际上是将源Stream转换为一个新的Stream,以达到需求效果。filter():元素过滤:Stream.of(1,2,3,4,5).filter(item->item>3)sorted():元素排序:Stream.of(1,2,3,1,2,3).distinct()map():元素映射:Stream.of(“a”,“b”,“hello”).map(item->item.toUpperCase());flatMap:元素映射:Stream.of(1,2,3).Map(integer->Stream.of(integer*10))distinct():去重操作concat():拼接:Stream.concat(Stream.of(1,2,3),Stream.of(4,5));Peek:peek方法生成一个包含原Stream的所有元素的新Stream,同时会提供一个消费函数(Consumer实例),新Stream每个元素被消费的时候都会执行给定的消费函数,并且消费函数优先执行skip:跳过。skip方法将过滤掉原Stream中的前N个元素,返回剩下的元素所组成的新StreamIterate:其返回的也是一个无限长度的Stream,通过函数f迭代对给指定的元素种子而产生无限连续有序Stream,其中包含的元素可以认为是:seed,f(seed),f(f(seed))无限循环generator方法,返回一个无限长度的Stream,其元素由Supplier接口的提供。流的操作分类:中间中间操作:Intermediate主要是用14流的操作分类:短路短路操作(Short-circuiting):对流中的元素进行判断、取值等操作。allMatch:判断Stream中的元素是否全部满足指定条件。如果全部满足条件返回true,否则返回false。anyMatch:判断Stream中的是否有满足指定条件的元素。如果最少有一个满足条件返回true,否则返回false。findAny:操作用于获取含有Stream中的某个元素的Optional,如果Stream为空,则返回一个空的Optional。由于此操作的行动是不确定的,其会自由的选择Stream中的任何元素findFirst:findFirst操作用于获取含有Stream中的第一个元素的Optional,如果Stream为空,则返回一个空的Optional。、limit:截取原Stream前指定值N个元素noneMatch:noneMatch方法将判断Stream中的所有元素是否满足指定的条件,如果所有元素都不满足条件,返回true;否则,返回false.流的操作分类:短路短路操作(Short-circuiting15流的操作分类:最终操作最终操作:最终操作只能操作一遍,操作完成后,该流就会关闭了。如再进行操作,便会报错。forEach():遍历每个元素。reduce():把Stream元素组合起来。例如,字符串拼接,数值的sum,min,max,average都是特殊的reduce。collect():返回一个新的集合。min():找到最小值。max():找到最大值。流的操作分类:最终操作最终操作:最终操作只能操作一遍,操作完16中间操作:过滤、排序Filter:过滤,侧重于过滤。forEach:循环Stream<String>streams=Stream.of("helo","world”,"hi","sprin");streams.filter((a)->a.startsWith("h")).forEach(System.out::print);Sorted:排序:默认按字符排序,也可以自定义排序。
如果数字类型:默认按从小到大的顺序。streams.sorted().forEach(System.out::println);中间操作:过滤、排序Filter:过滤,侧重于过滤。forE17中间操作:去重distinct:过滤,Stream中包含的元素进行去重操作
Stream<String>streams=Stream.of("HELLO","World","world","WorLd","World","heLLo");streams.distinct().forEach(System.out::println);注:区分大小写中间操作:去重distinct:过滤,Stream中包含的元18中间操作:映射Map映射:侧重于对元素的转换和操作。封装好了,三种变形:mapToDouble,mapToInt,mapToLongstreams.map(String::toLowerCase).forEach(System.out::println);streams.map(a->a.concat("_aa")).forEach(System.out::println);flatMap映射:该换转函数的对象是一个Stream,也不会再创建一个新的Stream,而是将原Stream的元素取代为转换的Stream。flatMapToInt,flatMapToLong和flatMapToDouble。中间操作:映射Map映射:侧重于对元素的转换和操作。封装好了19短路操作(Short-circuiting)allMatch:判断Stream中的元素是否全部满足指定条件。如果全部满足条件返回true,否则返回false。anyMatch:判断Stream中的是否有满足指定条件的元素。如果最少有一个满足条件返回true,否则返回false。findAny:操作用于获取含有Stream中的某个元素的Optional,如果Stream为空,则返回一个空的Optional。findFirst:操作用于获取含有Stream中的第一个元素的Optional,如果Stream为空,则返回一个空的Optional。Limit:方法将截取原Stream,截取后Stream的最大长度不能超过指定值NnoneMatch:方法将判断Stream中的所有元素是否满足指定的条件,如果所有元素都不满足条件,返回true;否则,返回false.短路操作(Short-circuiting)allMatch20短路操作allMatch:Stream.of(1,2,3,4).allMatch(integer->integer>0);findAny:Stream.of(1,2,3,4).findAny();findFirst:Stream.of(1,2,3,4).findFirst();Limit:Stream.of(1,2,3,4,5).limit(2)noneMatch:Stream.of(1,2,3,4,5).noneMatch(integer->integer>10);
和相返短路操作allMatch:Stream.of(1,2,321最终操作count方法将返回Stream中元素的个数。forEach:遍历Stream中的所元素,避免了使用for循环,让代码更简洁,逻辑更清晰。max方法根据指定的Comparator,返回一个Optional,该Optional中的value值就是Stream中最大的元素。原Stream根据比较器Comparator,进行排序(升序或者是降序),所谓的最大值就是从新进行排序的,Stream.of(1,2,3,4,5).max();Stream.of(1,2,3,4,5).max((o1,o2)->o2-o1);最终操作count方法将返回Stream中元素的个数。22安全性Java一直缺少BASE64编码API,以至于通常在项目开发中会选用第三方的API实现(commons-codec或sun.misc.BASE64Decoder)。Java8实现了BASE64编解码API,它包含到java.util中。//编码StringasB64=Base64.getEncoder().encodeToString("HelloJDK8".getBytes("utf-8"));System.out.println(asB64);//输出为:SGVsbG8gSkRLOA==//解码byte[]asBytes=Base64.getDecoder().decode("SGVsbG8gSkRLOA==");System.out.println(newString(asBytes,"utf-8"));//输出为:HelloJDK8安全性Java一直缺少BASE64编码API,以至于通常在23IO/NIO的改进主要包括:改进了java.nio.charset.Charset的实现,使编码和解码的效率得以提升,也精简了jre/lib/charsets.jar包;优化了String(byte[],*)构造方法和String.getBytes()方法的性能;还增加了一些新的IO/NIO方法,使用这些方法可以从文件或者输入流中获取流(java.util.stream.Stream),通过对流的操作,可以简化文本行处理、目录遍历和文件查找。新增的API如下:BufferedReader.line():返回文本行的流Stream<String>
(Path,Charset):返回文本行的流Stream<String>
(Path):遍历当前目录下的文件和目录
(Path,int,):遍历某一个目录下的所有文件和指定深度的子目录
(Path,int,BiPredicate,...):查找相应的文件(newFile(“.”).toPath()).forEach(System.out::println);
操作列出当前目录下的所有文件和目录IO/NIO的改进主要包括:改进了java.nio.cha24全球化功能支持新的Unicode6.2.0标准,新增了日历和本地化的API,改进了日期时间的管理等。
Java8吸收了Joda-Time的精华,以一个新的开始为Java创建优秀的API。新的java.time中包含了所有关于时钟(Clock),本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类。历史悠久的Date类新增了toInstant()方法,用于把Date转换成新的表示形式。这些新增的本地化时间日期API大大简化了了日期时间和本地化的管理。全球化功能支持新的Unicode6.2.0标准,新增25时间操作举例例如,下面是对LocalDate,LocalTime的简单应用:
//LocalDate
LocalDatelocalDate=LocalDate.now();//获取本地日期
localDate=LocalDate.ofYearDay(2014,200);//获得2014年的第200天System.out.println(localDate.toString());//输出:2014-07-19localDate=LocalDate.of(2014,Month.SEPTEMBER,10);//2014年9月10日System.out.println(localDate.toString());//输出:2014-09-10
//LocalTime
LocalTimelocalTime=LocalTime.now();//获取当前时间System.out.println(localTime.toString());//输出当前时间localTime=LocalTime.of(10,20,50);//获得10:20:50的时间点System.out.println(localTime.toString());//输出:10:20:50
//Clock时钟
Clockclock=Clock.systemDefaultZone();//获取系统默认时区(当前瞬时时间)longmillis=lis();//时间操作举例例如,下面是对LocalDate,LocalT26js引擎Nashorn高性能的轻型JavaSript引擎:集成到JRE使用现有的:javax.scriptapi符合ECMAScript-262
5.1版本规范。新命令行工具JJS可支持JavascriptNashorn不支持浏览器DOM的对象js引擎Nashorn高性能的轻型JavaSript引擎27Nashorn举例javascript运行在jvm已经不是新鲜事了,Rhino早在jdk6的时候已经存在,但现在为何要替代Rhino,官方的解释是Rhino相比其他javascript引擎(比如google的V8)实在太慢了,要改造Rhino还不如重写。Nashorn比Rhino速度快了许多,作为高性能的javascript运行环境,Nashorn有很多可能。ScriptEngineengine=newScriptEngineManager().getEngineByName("nashorn");engine.eval(new("script.js"));engine.eval(“print(‘HelloWorld!’);”);Nashorn举例javascript运行在jvm已经不是新28JVM去除了永久代(PermGen)被元空间(Metaspace)代替配置:-XX:MetaspaceSize=8m-XX:MaxMetaspaceSize=80m
代替-XX:PermSize=10m-XX:MaxPermSize=10m原因:移除永久代是为融合HotSpotJVM与JRockitVM而做出的努力,因为JRockit没有永久代,不需要配置永久代。JVM去除了永久代(PermGen)被元空间(Metasp29经常不断地学习,你就什么都知道。你知道得越多,你就越有力量StudyConstantly,AndYouWillKnowEverything.TheMoreYouKnow,TheMorePowerfulYouWillBe写在最后经常不断地学习,你就什么都知道。你知道得越多,你就越有力量写30感谢聆听不足之处请大家批评指导PleaseCriticizeAndGuideTheShortcomings结束语讲师:XXXXXXXX年XX月XX日
感谢聆听结束语讲师:XXXXXX31JDK8新特性Oracle2014年3月发布了Java8正式版,它是java的一个里程牌版本,带来了诸多新特性。官网介绍:
一、针对java编程语言(JavaProgrammingLanguage)二、针对集合(Collections)三、CompactProfiles四、安全性五、JavaFX六工具(tools)七、国际化八、部署九、Date-TimePackage
十、ScriptingJDK8新特性Oracle2014年3月发布了Java8正32
java编程语言
(JavaProgrammingLanguage)
1:lambda表达式:一种新的语言特性,能够把函数作为方法的参数或将代码作为数据。lambda表达式使你在表示函数接口(具有单个方法的接口)的实例更加紧凑。2.方法引用是lambda表达式的一个简化写法,所引用的方法其实是lambda表达式的方法体实现,这样使代码更容易阅读
3.默认方法:Java8引入defaultmethod,或者叫virtualextensionmethod,目的是为了让接口可以事后添加新方法而无需强迫所有实现该接口的类都提供新方法的实现。也就是说它的主要使用场景可能会涉及代码演进。4.重复注解:允许在同一声明或类型(类,属性,或方法)的使用中多次使用同一个注解5.改善了类型推断6.方法参数反射
java编程语言
(JavaProgrammingLa33函数式接口Java8引入的一个核心概念是函数式接口(FunctionalInterfaces)。接口定义个唯一一个抽象方法,那么这个接口就成为函数式接口。同时,引入了一个新的注解:@FunctionalInterface。可以把他它放在一个接口前,表示这个接口是一个函数式接口。这个注解是非必须的,只要接口只包含一个方法的接口,虚拟机会自动判断,不过最好在接口上使用注解@FunctionalInterface进行声明。@FunctionalInterfacepublicinterfaceRunnable{
publicabstractvoidrun();}函数式接口Java8引入的一个核心概念是函数式接口(F34Lambda表达式函数式接口的重要属性是:我们能够使用Lambda实例化它们,Lambda表达式实例化函数接口作为方法参数,或者将代码作为数据对待。在Java8之前:匿名内部类,监听器和事件处理器的使用都显得很冗长,代码可读性很差。在Java8:Lambda表达式的应用则使代码变得更加紧凑,可读性增强;
Lambda表达式使并行操作大集合变得很方便,可以充分发挥多核CPU的优势,更易于为多核处理器编写代码;Lambda表达式由三个部分组成:第一部分为一个括号内用逗号分隔的形式参数,参数是函数式接口里面方法的参数;第二部分为一个箭头符号:->;第三部分为方法体,可以是表达式和代码块。语法如下:
1.方法体为表达式,该表达式的值作为返回值返回。
(parameters)->expression
2.方法体为代码块,必须用{}来包裹起来,且需要一个return返回值,但若函数式接口里面方法返回值是void,则无需返回值。
Lambda表达式函数式接口的重要属性是:我们能够使用La35Lambda和匿名内部类匿名表示法button.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
System.out.print(“这是内部类的表示法!");
}
});Lambada表示法button.addActionListener(
(ActionEvente)->
System.out.print("HellloLambdainactionPerformed")
);
Lambda和匿名内部类匿名表示法36Lambda举例//类型声明MathOperation<Integer,Integer>addition=(Integera,Integerb)->a+b;//不用类型声明MathOperation<Integer,Integer>subtraction=(a,b)->a-b;//大括号中的返回语句MathOperation<Long,Long>multiplication=(a,b)->{returna*b;};//没有大括号及返回语句MathOperation<Float,Float>division=(Floata,Floatb)->a/b;System.out.println("10+5="+tester.operate(10,5,addition));Lambda举例//类型声明37方法引用是lambda表达式的一个简化写法,所引用的方法其实是lambda表达式的方法体实现:List<String>names=Arrays.asList("zhangsan","lisi","wangwu","zhaoliu");Collections.sort(names,String::compareTo);Function<Integer,String>f1=String::valueOf;
Function<String,String>function=String::new;Supplier<String>supplier=String::new;方法引用是lambda表达式的一个简化写法,所引用的方法其实38默认方法Java8引入defaultmethod,或者叫virtualextensionmethod,目的是为了让接口可以添加新方法的实现,而无需强迫所有实现该接口的类都提供新方法的实现。比中:publicinterfaceMyInterface{ defaultvoidmyMethod(){
System.out.println("MyInterface");
}}默认方法Java8引入defaultmethod,或者叫39重复注解重复注解:允许在同一声明或类型(类,属性,或方法)的使用中多次使用同一个注解@Repeatable(Authorities.class)public@interfaceAuthority{
Stringrole();
}public@interfaceAuthorities{Authority[]value();}publicclassRepeatAnnotationUseNewVersion{@Authority(role="Admin")@Authority(role="Manager")publicvoiddoSomeThing(){}}重复注解重复注解:允许在同一声明或类型(类,属性,或方法)的40泛型的推断改进
jdk1.5:List<Apple>box=newArrayList<Apple>();Jdk1.7:List<Apple>box=newArrayList<>();Jdk1.8:List<String>list=newArrayList<>();list.addAll(newArrayList<>());//由于addAll期望获得Collection<?extendsString>类型的参数,JDK8可以根据声明的类型自动判断。//lambda表达式的推断MathOperation<Integer,Integer>subtraction=(a,b)->a-b;泛型的推断改进jdk1.5:List<Apple>b41Stream介绍提供了新包java.util.stream,这个包提供了StreamAPI功能,支持以函数风格(functional-style)去处理流中的元素。在CollectionsAPI中已经整合了StreamAPI,可以在集合上进行批量操作(bulkoperations),如顺序或并行的map-reduce转换。
StreamAPI提供了一种操作大数据的接口,让数据操作更容易和更快。它具有过滤、映射以及减少遍历数等方法,这些方法分两种:中间方法和终端方法,“流”抽象天生就该是持续的,中间方法永远返回的是Stream,因此如果我们要获取最终结果的话,必须使用终点操作才能收集流产生的最终结果Stream介绍提供了新包java.util.stream,42Sream概念Stream不是集合元素,也不是数据结构,它相当于一个高级版本的Iterator,不可以重复遍历里面的数据,像水一样,流过了就一去不复返。它和普通的Iterator不同的是,它可以并行遍历,普通的Iterator只能是串行,在一个线程中执行。操作包括:中间操作和最终操作(只能操作一遍)
串行流操作在一个线程中依次完成。并行流在多个线程中完成,主要利用了JDK7的Fork/Join框架来拆分任务和加速处理。相比串行流,并行流可以很大程度提高程序的效率Sream概念Stream不是集合元素,也不是数据结构,43流的种类流有串行和并行两种,串行流上的操作是在一个线程中依次完成,而并行流则是在多个线程上同时执行。并行与串行的流可以相互切换:通过stream.sequential()返回串行的流,通过stream.parallel()返回并行的流。相比较串行的流,并行的流可以很大程度上提高程序的执行效率。下面是分别用串行和并行的方式对集合进行排序。list.stream().sequential()).sorted().count();流的种类流有串行和并行两种,串行流上的操作是在一个线程中依次44流的操作分类:中间中间操作:Intermediate主要是用来对Stream做出相应转换及限制流,实际上是将源Stream转换为一个新的Stream,以达到需求效果。filter():元素过滤:Stream.of(1,2,3,4,5).filter(item->item>3)sorted():元素排序:Stream.of(1,2,3,1,2,3).distinct()map():元素映射:Stream.of(“a”,“b”,“hello”).map(item->item.toUpperCase());flatMap:元素映射:Stream.of(1,2,3).Map(integer->Stream.of(integer*10))distinct():去重操作concat():拼接:Stream.concat(Stream.of(1,2,3),Stream.of(4,5));Peek:peek方法生成一个包含原Stream的所有元素的新Stream,同时会提供一个消费函数(Consumer实例),新Stream每个元素被消费的时候都会执行给定的消费函数,并且消费函数优先执行skip:跳过。skip方法将过滤掉原Stream中的前N个元素,返回剩下的元素所组成的新StreamIterate:其返回的也是一个无限长度的Stream,通过函数f迭代对给指定的元素种子而产生无限连续有序Stream,其中包含的元素可以认为是:seed,f(seed),f(f(seed))无限循环generator方法,返回一个无限长度的Stream,其元素由Supplier接口的提供。流的操作分类:中间中间操作:Intermediate主要是用45流的操作分类:短路短路操作(Short-circuiting):对流中的元素进行判断、取值等操作。allMatch:判断Stream中的元素是否全部满足指定条件。如果全部满足条件返回true,否则返回false。anyMatch:判断Stream中的是否有满足指定条件的元素。如果最少有一个满足条件返回true,否则返回false。findAny:操作用于获取含有Stream中的某个元素的Optional,如果Stream为空,则返回一个空的Optional。由于此操作的行动是不确定的,其会自由的选择Stream中的任何元素findFirst:findFirst操作用于获取含有Stream中的第一个元素的Optional,如果Stream为空,则返回一个空的Optional。、limit:截取原Stream前指定值N个元素noneMatch:noneMatch方法将判断Stream中的所有元素是否满足指定的条件,如果所有元素都不满足条件,返回true;否则,返回false.流的操作分类:短路短路操作(Short-circuiting46流的操作分类:最终操作最终操作:最终操作只能操作一遍,操作完成后,该流就会关闭了。如再进行操作,便会报错。forEach():遍历每个元素。reduce():把Stream元素组合起来。例如,字符串拼接,数值的sum,min,max,average都是特殊的reduce。collect():返回一个新的集合。min():找到最小值。max():找到最大值。流的操作分类:最终操作最终操作:最终操作只能操作一遍,操作完47中间操作:过滤、排序Filter:过滤,侧重于过滤。forEach:循环Stream<String>streams=Stream.of("helo","world”,"hi","sprin");streams.filter((a)->a.startsWith("h")).forEach(System.out::print);Sorted:排序:默认按字符排序,也可以自定义排序。
如果数字类型:默认按从小到大的顺序。streams.sorted().forEach(System.out::println);中间操作:过滤、排序Filter:过滤,侧重于过滤。forE48中间操作:去重distinct:过滤,Stream中包含的元素进行去重操作
Stream<String>streams=Stream.of("HELLO","World","world","WorLd","World","heLLo");streams.distinct().forEach(System.out::println);注:区分大小写中间操作:去重distinct:过滤,Stream中包含的元49中间操作:映射Map映射:侧重于对元素的转换和操作。封装好了,三种变形:mapToDouble,mapToInt,mapToLongstreams.map(String::toLowerCase).forEach(System.out::println);streams.map(a->a.concat("_aa")).forEach(System.out::println);flatMap映射:该换转函数的对象是一个Stream,也不会再创建一个新的Stream,而是将原Stream的元素取代为转换的Stream。flatMapToInt,flatMapToLong和flatMapToDouble。中间操作:映射Map映射:侧重于对元素的转换和操作。封装好了50短路操作(Short-circuiting)allMatch:判断Stream中的元素是否全部满足指定条件。如果全部满足条件返回true,否则返回false。anyMatch:判断Stream中的是否有满足指定条件的元素。如果最少有一个满足条件返回true,否则返回false。findAny:操作用于获取含有Stream中的某个元素的Optional,如果Stream为空,则返回一个空的Optional。findFirst:操作用于获取含有Stream中的第一个元素的Optional,如果Stream为空,则返回一个空的Optional。Limit:方法将截取原Stream,截取后Stream的最大长度不能超过指定值NnoneMatch:方法将判断Stream中的所有元素是否满足指定的条件,如果所有元素都不满足条件,返回true;否则,返回false.短路操作(Short-circuiting)allMatch51短路操作allMatch:Stream.of(1,2,3,4).allMatch(integer->integer>0);findAny:Stream.of(1,2,3,4).findAny();findFirst:Stream.of(1,2,3,4).findFirst();Limit:Stream.of(1,2,3,4,5).limit(2)noneMatch:Stream.of(1,2,3,4,5).noneMatch(integer->integer>10);
和相返短路操作allMatch:Stream.of(1,2,352最终操作count方法将返回Stream中元素的个数。forEach:遍历Stream中的所元素,避免了使用for循环,让代码更简洁,逻辑更清晰。max方法根据指定的Comparator,返回一个Optional,该Optional中的value值就是Stream中最大的元素。原Stream根据比较器Comparator,进行排序(升序或者是降序),所谓的最大值就是从新进行排序的,Stream.of(1,2,3,4,5).max();Stream.of(1,2,3,4,5).max((o1,o2)->o2-o1);最终操作count方法将返回Stream中元素的个数。53安全性Java一直缺少BASE64编码API,以至于通常在项目开发中会选用第三方的API实现(commons-codec或sun.misc.BASE64Decoder)。Java8实现了BASE64编解码API,它包含到java.util中。//编码StringasB64=Base64.getEncoder().encodeToString("HelloJDK8".getBytes("utf-8"));System.out.println(asB64);//输出为:SGVsbG8gSkRLOA==//解码byte[]asBytes=Base64.getDecoder().decode("SGVsbG8gSkRLOA==");System.out.println(newString(asBytes,"utf-8"));//输出为:HelloJDK8安全性Java一直缺少BASE64编码API,以至于通常在54IO/NIO的改进主要包括:改进了java.nio.charset.Charset的实现,使编码和解码的效率得以提升,也精简了jre/lib/charsets.jar包;优化了String(byte[],*)构造方法和String.getBytes()方法的性能;还增加了一些新的IO/NIO方法,使用这些方法可以从文件或者输入流中获取流(java.util.stream.Stream),通过对流的操作,可以简化文本行处理、目录遍历和文件查找。新增的API如下:BufferedReader.line():返回文本行的流Stream<String>
(Path,Charset):返回文本行的流Stream<String>
(Path):遍历当前目录下的文件和目录
(Path,int,):遍历某一个目录下的所有文件和指定深度的子目录
(Path,int,BiPredicate,...):查找相应的文件(newFile(“.”).toPath()).
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 订购仔猪合同协议书模板
- 2025年数据驱动测试试题及答案
- 退休反聘合同解除协议书
- 房屋换顶合同协议书
- 重点词汇现代汉语考试试题及答案
- 所有权与责任在测试中的传递原理试题及答案
- 致胜策略2025年计算机二级VFP试题及答案
- 2025年计算机VFP考试学习理念试题及答案
- 2025年计算机二级JAVA复习与应试的最佳方案及试题及答案
- 安徽省黄山市“八校联盟”2023-2024学年高二上学期期中考试物理 含解析
- 施工现场安全作业流程考题
- 焊工初级测试试题及答案
- 福建省福州教育学院附属中学2025年高三冲刺模拟英语试卷含解析
- 近五年安徽中考英语真题及答案2024
- 2024年高校辅导员考试题库试题及答案
- 现浇箱梁施工培训课件
- 关于“高中整本书阅读教学策略”的文献综述
- 软著申请流程
- 测绘管理考试试题及答案
- 2025年山东科技面试试题及答案
- 朋友出去旅游免责协议书7篇
评论
0/150
提交评论