一、十大特性

1.Lambda表达式

2.Stream函数式操作流元素集合

3.接口新增:默认方法与静态方法

4.方法引用,与Lambda表达式联合使用

5.引入重复注解

6.类型注解

7.最新的Date/Time API (JSR 310)

8.新增base64加解密API

9.数组并行(parallel)操作

10.JVM的PermGen空间被移除:取代它的是Metaspace(JEP 122)元空间

二、demo

demo基于junit可测。

  1 /**
2 *
3 * @ClassName:JDK8_features
4 * @Description:JDK8新特性
5 * @author diandian.zhang
6 * @date 2017年4月17日上午9:13:24
7 */
8 public class JDK8_features {
9
10 public List<Integer> list = Lists.newArrayList(1,2,3,4,5,6,7,8,9,10);
11
12 /**
13 * 1.Lambda表达式
14 */
15 @Test
16 public void testLambda(){
17 list.forEach(System.out::println);
18 list.forEach(e -> System.out.println("方式二:"+e));
19 }
20
21 /**
22 * 2.Stream函数式操作流元素集合
23 */
24 @Test
25 public void testStream(){
26 List<Integer> nums = Lists.newArrayList(1,1,null,2,3,4,null,5,6,7,8,9,10);
27 System.out.println("求和:"+nums
28 .stream()//转成Stream
29 .filter(team -> team!=null)//过滤
30 .distinct()//去重
31 .mapToInt(num->num*2)//map操作
32 .skip(2)//跳过前2个元素
33 .limit(4)//限制取前4个元素
34 .peek(System.out::println)//流式处理对象函数
35 .sum());//
36 }
37
38 /**
39 * 3.接口新增:默认方法与静态方法
40 * default 接口默认实现方法是为了让集合类默认实现这些函数式处理,而不用修改现有代码
41 * (List继承于Iterable<T>,接口默认方法不必须实现default forEach方法)
42 */
43 @Test
44 public void testDefaultFunctionInterface(){
45 //可以直接使用接口名.静态方法来访问接口中的静态方法
46 JDK8Interface1.staticMethod();
47 //接口中的默认方法必须通过它的实现类来调用
48 new JDK8InterfaceImpl1().defaultMethod();
49 //多实现类,默认方法重名时必须复写
50 new JDK8InterfaceImpl2().defaultMethod();
51 }
52
53 public class JDK8InterfaceImpl1 implements JDK8Interface1 {
54 //实现接口后,因为默认方法不是抽象方法,重写/不重写都成!
55 // @Override
56 // public void defaultMethod(){
57 // System.out.println("接口中的默认方法");
58 // }
59 }
60
61 public class JDK8InterfaceImpl2 implements JDK8Interface1,JDK8Interface2 {
62 //实现接口后,默认方法名相同,必须复写默认方法
63 @Override
64 public void defaultMethod() {
65 //接口的
66 JDK8Interface1.super.defaultMethod();
67 System.out.println("实现类复写重名默认方法!!!!");
68 }
69 }
70
71 /**
72 * 4.方法引用,与Lambda表达式联合使用
73 */
74 @Test
75 public void testMethodReference(){
76 //构造器引用。语法是Class::new,或者更一般的Class< T >::new,要求构造器方法是没有参数;
77 final Car car = Car.create( Car::new );
78 final List< Car > cars = Arrays.asList( car );
79 //静态方法引用。语法是Class::static_method,要求接受一个Class类型的参数;
80 cars.forEach( Car::collide );
81 //任意对象的方法引用。它的语法是Class::method。无参,所有元素调用;
82 cars.forEach( Car::repair );
83 //特定对象的方法引用,它的语法是instance::method。有参,在某个对象上调用方法,将列表元素作为参数传入;
84 final Car police = Car.create( Car::new );
85 cars.forEach( police::follow );
86 }
87
88 public static class Car {
89 public static Car create( final Supplier< Car > supplier ) {
90 return supplier.get();
91 }
92
93 public static void collide( final Car car ) {
94 System.out.println( "静态方法引用 " + car.toString() );
95 }
96
97 public void repair() {
98 System.out.println( "任意对象的方法引用 " + this.toString() );
99 }
100
101 public void follow( final Car car ) {
102 System.out.println( "特定对象的方法引用 " + car.toString() );
103 }
104 }
105
106 /**
107 * 5.引入重复注解
108 * 1.@Repeatable
109 * 2.可以不用以前的“注解容器”写法,直接写2次相同注解即可
110 *
111 * Java 8在编译器层做了优化,相同注解会以集合的方式保存,因此底层的原理并没有变化。
112 */
113 @Test
114 public void RepeatingAnnotations(){
115 RepeatingAnnotations.main(null);
116 }
117
118 /**
119 * 6.类型注解
120 * 新增类型注解:ElementType.TYPE_USE 和ElementType.TYPE_PARAMETER(在Target上)
121 *
122 */
123 @Test
124 public void ElementType(){
125 Annotations.main(null);
126 }
127
128 /**
129 * 7.最新的Date/Time API (JSR 310)
130 */
131 @Test
132 public void DateTime(){
133 //1.Clock
134 final Clock clock = Clock.systemUTC();
135 System.out.println( clock.instant() );
136 System.out.println( clock.millis() );
137
138 //2. ISO-8601格式且无时区信息的日期部分
139 final LocalDate date = LocalDate.now();
140 final LocalDate dateFromClock = LocalDate.now( clock );
141
142 System.out.println( date );
143 System.out.println( dateFromClock );
144
145 // ISO-8601格式且无时区信息的时间部分
146 final LocalTime time = LocalTime.now();
147 final LocalTime timeFromClock = LocalTime.now( clock );
148
149 System.out.println( time );
150 System.out.println( timeFromClock );
151
152 // 3.ISO-8601格式无时区信息的日期与时间
153 final LocalDateTime datetime = LocalDateTime.now();
154 final LocalDateTime datetimeFromClock = LocalDateTime.now( clock );
155
156 System.out.println( datetime );
157 System.out.println( datetimeFromClock );
158
159 // 4.特定时区的日期/时间,
160 final ZonedDateTime zonedDatetime = ZonedDateTime.now();
161 final ZonedDateTime zonedDatetimeFromClock = ZonedDateTime.now( clock );
162 final ZonedDateTime zonedDatetimeFromZone = ZonedDateTime.now( ZoneId.of( "America/Los_Angeles" ) );
163
164 System.out.println( zonedDatetime );
165 System.out.println( zonedDatetimeFromClock );
166 System.out.println( zonedDatetimeFromZone );
167
168 //5.在秒与纳秒级别上的一段时间
169 final LocalDateTime from = LocalDateTime.of( 2014, Month.APRIL, 16, 0, 0, 0 );
170 final LocalDateTime to = LocalDateTime.of( 2015, Month.APRIL, 16, 23, 59, 59 );
171
172 final Duration duration = Duration.between( from, to );
173 System.out.println( "Duration in days: " + duration.toDays() );
174 System.out.println( "Duration in hours: " + duration.toHours() );
175 }
176
177 /**
178 * 8.新增base64加解密API
179 */
180 @Test
181 public void testBase64(){
182 final String text = "就是要测试加解密!!abjdkhdkuasu!!@@@@";
183 String encoded = Base64.getEncoder()
184 .encodeToString( text.getBytes( StandardCharsets.UTF_8 ) );
185 System.out.println("加密后="+ encoded );
186
187 final String decoded = new String(
188 Base64.getDecoder().decode( encoded ),
189 StandardCharsets.UTF_8 );
190 System.out.println( "解密后="+decoded );
191 }
192
193 /**
194 * 9.数组并行(parallel)操作
195 */
196 @Test
197 public void testParallel(){
198 long[] arrayOfLong = new long [ 20000 ];
199 //1.给数组随机赋值
200 Arrays.parallelSetAll( arrayOfLong,
201 index -> ThreadLocalRandom.current().nextInt( 1000000 ) );
202 //2.打印出前10个元素
203 Arrays.stream( arrayOfLong ).limit( 10 ).forEach(
204 i -> System.out.print( i + " " ) );
205 System.out.println();
206 //3.数组排序
207 Arrays.parallelSort( arrayOfLong );
208 //4.打印排序后的前10个元素
209 Arrays.stream( arrayOfLong ).limit( 10 ).forEach(
210 i -> System.out.print( i + " " ) );
211 System.out.println();
212 }
213
214 /**
215 * 10.JVM的PermGen空间被移除:取代它的是Metaspace(JEP 122)元空间
216 */
217 @Test
218 public void testMetaspace(){
219 //-XX:MetaspaceSize初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整
220 //-XX:MaxMetaspaceSize最大空间,默认是没有限制
221 //-XX:MinMetaspaceFreeRatio在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集
222 //-XX:MaxMetaspaceFreeRatio在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集
223 }
224
225 }

jdk8十大特性并代码demo(转)的更多相关文章

  1. ES6的十大特性和认知

    ---恢复内容开始--- ES6(ECMAScript2015)的出现,无疑给前端开发人员带来了新的惊喜,它包含了一些很棒的新特性,可以更加方便的实现很多复杂的操作,提高开发人员的效率.本文主要针对E ...

  2. 前端开发者不得不知的es6十大特性(转)

    转载自AlloyTeam:http://www.alloyteam.com/2016/03/es6-front-end-developers-will-have-to-know-the-top-ten ...

  3. 前端开发者不得不知的ES6十大特性

    前端开发者不得不知的ES6十大特性 转载 作者:AlloyTeam 链接:http://www.alloyteam.com/2016/03/es6-front-end-developers-will- ...

  4. 不得不知的ES6十大特性

    ES6(ECMAScript2015)的出现,无疑给前端开发人员带来了新的惊喜,它包含了一些很棒的新特性,可以更加方便的实现很多复杂的操作,提高开发人员的效率. 本文主要针对ES6做一个简要介绍. 主 ...

  5. ES6十大特性

    本文主要针对ES6做一个简要介绍. 主要译自:  http://webapplog.com/ES6/comment-page-1/.也许你还不知道ES6是什么, 实际上, 它是一种新的javascri ...

  6. 总结JAVA语言的十大特性

    JAVA语言的十大特性 1.简单 Java语言的语法简单明了,容易掌握从,而且Java语言是纯面向对象的语言. Java语言的语法规则和C++类似,从某种意义上来讲,Java原因是由C语言和C++语言 ...

  7. ECMAScript 6十大特性

    ES6入门 http://es6.ruanyifeng.com/ ES6排名前十的最佳特性列表 Default Parameters(默认参数) in ES6 Template Literals (模 ...

  8. jQuery Mobile高手必备的十大技巧和代码片段

    与任何新技术一样,常常难就难在如何开始入手. 有鉴于此,我们整理出了与jQuery Mobile库有关的我认为最便利的一些技巧.方法和代码片段. 由于本文不是旨在全面介绍使用jQuery Mobile ...

  9. ES6十大特性(转载CSDN)

    1. const和let关键字 const用于定义常量. let用于定义变量.但是JavaScript中不是已经有变量了吗? 是的,这很正确,但用var声明的变量具有函数作用域,并会被提升到顶部. 这 ...

随机推荐

  1. csu 1801(合数分解+排列组合)

    1801: Mr. S’s Romance Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 15  Solved: 5[Submit][Status][W ...

  2. window下线程同步之(Event Objects(事件))

    Event 方式是最具弹性的同步机制,因为他的状态完全由你去决定,不会像 Mutex 和 Semaphores 的状态会由类似:WaitForSingleObject 一类的函数的调用而改变,所以你可 ...

  3. Pandas DataFrame构造简析

    参考书籍:<利用Python进行数据分析> DataFrame简介: DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值.字符串.布尔值等).Dat ...

  4. html学习-js

    1.js介绍 JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理.js能使 ...

  5. PHP 权威代码风格规范

    1.常规 尽量统一ide 比如phpstream 配置文件(Settings → Code Style → PHP → Set from... → Predefined Style → PSR1/PS ...

  6. js的浮点(小数)数+-*/

    //除法 function accDiv(arg1,arg2){ var t1=0,t2=0,r1,r2; try{t1=arg1.toString().split(".")[1] ...

  7. 纯css导航下划线跟随效果【转载】

    css: ul { display: flex; position: absolute; width: 800px; top: 50%; left: 50%; transform: translate ...

  8. thinkjs项目中使用mongoose需要注意的地方

    原文链接thinkjs项目中使用mongoose需要注意的地方 由于thinkjs不支持mongodb的关联模型查询,所以我不得不使用mongoose这个第三方odm. 我有两个选择,一是像我在exp ...

  9. ZOJ 3954 Seven-Segment Display

    二分图匹配. 先检查每个数字$1$的个数是否满足条件,不满足直接就是无解.剩下的情况可以建立二分图,如果现在的某一列可以对应于原图的某一列,那么建边.如果二分图的最大匹配是$7$,则有解,否则误解. ...

  10. Markdown 格式如何转换成 Word?

    参考资料:https://www.zhihu.com/question/22972843/answer/136008865 markdown语法简洁,写作效率极高,非常适合网络博客.邮件.笔记等非正式 ...