java8新特性普及
来源:互联网 发布:文件管理网站源码 编辑:程序博客网 时间:2024/06/14 17:33
1.Lambda 表达式
2.函数式接口
3.Stream (流)
4.Date/Time API
java8新特性
- lambda表达式:java8引入的
函数式接口
- 函数式接口(只有一个方法的接口):让现有的功能和lambda表达式兼容
- 函数式接口重要属性:可以使用lambda实例化它
- @FunctionalInterface 添加注解(不是必须),只允许有一个抽象方法
- 官方提供:java.util.Function包中
- 方法引用:就是给lambda表达式去一个名字
- class::new class::method
默认方法
- 默认方法(default):目的向后兼容,旧的接口也能用到lambda表达式
- 通俗的讲就是可以在interface中实现方法,这样旧的API就不用实现这个方法,
- 而直接使用这个方法
- 子类继承多个默认方法接口,出现默认方法冲突
- 方法一:在子类中实现冲突的方法
- 方法二:在子类中实现具体使用父类 如:FatherName.super.methodName()
- 静态默认方法:可以在接口中添加一个静态的默认方法
Optional类
- 含义:是一个容器对象,用于容纳非空对象
- Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException)
- 用法:Optional.ofNullable(object1).orElse(object2)
Stream (流)
- 流式操作,可以对集合进行并行处理和函数操作
- Collection是一种面向内存的数据结构,Stream是面向计算的
- 集合中两个创建流:
- stream() 返回将集合作为源的连续流
- parallelStream() 返回将集合作为源的并行流
相关方法:
- forEach() 每个元素的迭代操作
- map 将每一个元素映射到结果上
- filter 过滤
- limit 限制输出数
- sorted 排序
- Collector 用于统计的Collector来计算Stream处理完成后的所有统计数据
Date/Time API and java 内置Base64编码
- 引进目的:修复就API的一些缺陷
- java.time包引进新API:
- Local:简化的date/time API,没有时区处理的特性。
- Zoned:定制的date/time API,用于处理多时区的情况。
LocalDate LocalTime LocalDateTime
枚举计时单位:java.time.temporal.ChronoUnit包内,添加枚举常量,替代旧API
- 时间段:
- Period:处理日期相关的时间段
- Duration 处理时间相关的时间段
- 时间调节器:
- TemporalAdjuster 用于计算日期的数学工具
- 向后兼容 toInstant方法转化为新API
Base64:
- 三种类型的编解吗:
- 简易模式:输出是完全按照A-Za-z0-9+/字符集映射的。
- 编码不会自己增加输出行,解码器也不会接受任何超出A-Za-z0-9+/范围的内容。
- URL模式:输出基于A-Za-z0-9+/的映射,但对于URL和文件名是安全的。
- MIME模式:输出对于MIME类型的内容是友好的。如果超过76个字符,则会换行输出,
- 并且换行符\n之后会自动添加一个\r。如果某行没有\r则说明输出的内容已经结束。
- Base64.Encoder :编码
- Base64.Decoder :解码
- getEncoder():该方法返回一个使用基本Base64编码格式的Encoder对象。相反的解码方法是getDecoder()。
- getUrlEncoder():该方法返回一个使用URL类型的Base64编码格式的Encoder对象。相反的解码方法是getUrlDecoder()。
- getMimeEncoder():该方法返回一个使用MIME类型的Base64编码格式的Encoder对象。相反的解码方法是getMimeDecoder()
package com.java8;import java.time.*;import java.time.temporal.ChronoUnit;import java.time.temporal.TemporalAdjuster;import java.time.temporal.TemporalAdjusters;import java.util.*;import java.util.function.Predicate;import java.util.stream.Collector;import java.util.stream.Collectors;public class TestJava8 { final static String aa = "hello";// static String aa = "helll"; public static void main(String[]args){ TestJava8 tester = new TestJava8(); MathOperation addition = (a,b)->a+b; System.out.println(addition.operation(1,2)); List<String> names = new ArrayList<String>(); names.add("Tom"); names.add("Jim"); names.forEach((x)-> System.out.println(x)); names.forEach(System.out::println); List<Integer> lists = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); System.out.println("All of the number"); System.out.println("test predicate"); eval(lists,n->true); MathOperation.testStatic(); Optional<Integer> opt = Optional.empty(); System.out.println(opt.orElse(10));// Optional.ofNullable(object1).orElse(object2) Random random = new Random(); random.ints().limit(10).forEach(System.out::print); List<Integer> tStream = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); tStream.parallelStream().map(x->x+1).collect(Collectors.toList()).forEach(System.out::println); System.out.println("======================================="); testJava8_Date_Time(); System.out.println("======================================="); timeBetween(); System.out.println("======================================="); testBase64(); } public static void testBase64(){ //简易模式编码 String stringEncoder = Base64.getEncoder().encodeToString("base64".getBytes()); System.out.println(stringEncoder); System.out.println(new String(Base64.getDecoder().decode(stringEncoder))); //url String urlEncoder = Base64.getUrlEncoder().encodeToString("urlBase64".getBytes()); System.out.println(urlEncoder); System.out.println(new String(Base64.getUrlDecoder().decode(urlEncoder))); //Mime String MimeEncoder = Base64.getMimeEncoder().encodeToString("MimeBase64".getBytes()); System.out.println(MimeEncoder); System.out.println( new String(Base64.getMimeDecoder().decode(MimeEncoder)) ); } public static void timeBetween(){ LocalDate date1 = LocalDate.now(); LocalDate date2 = date1.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); //ChronoUnit.WEEKS)) System.out.println("data1:"+date1+" date2:"+date2); System.out.println(Period.between(date1,date2).getDays()); LocalTime time1 = LocalTime.now(); LocalTime time2 = time1.plus(111,ChronoUnit.MINUTES); System.out.println("time1:"+time1+" time2:"+time2); System.out.println(Duration.between(time1,time2).getSeconds()); } public static void testJava8_Date_Time(){ //获取当前的时间和日期 LocalDateTime localDateTime = LocalDateTime.now(); System.out.println("current date and time:"+localDateTime); //输出当前的本地值 ; System.out.println( localDateTime.toLocalDate()); LocalDate.of(2016, Month.DECEMBER,25); //将字符串转为 ZonedDateTime date1 = ZonedDateTime.parse("2017-12-15T19:22:15+01:30[Europe/Paris]"); System.out.println(date1); //设置时区ID为: ZoneId id = ZoneId.of("Asia/Kolkata"); System.out.println(id); //获取当前默认时区 ZoneId defaultDate = ZoneId.systemDefault(); System.out.println(defaultDate); } public static void eval(List<Integer> list, Predicate<Integer> predicate){ list.forEach(x->{ if(predicate.test(x)) { System.out.print(x+","); } } ); }}// 下面是定义的一些接口和方法interface MathOperation{ int operation(int a,int b); default void test(){ System.out.println("test default"); } static void testStatic(){ System.out.println("this is static static"); }}
阅读全文
0 0
- java8新特性普及
- java8 新特性
- java8新特性 ---译
- Java8新特性教程
- Java8新特性学习
- JAVA8新特性
- Java8新特性详解
- JAVA8的新特性
- java8 新特性
- java8新特性
- java8 新特性
- JAVA8新特性一览
- Java8 新特性学习
- Java8新特性 Stream
- java8新特性
- java8新特性
- java8新特性
- java8新特性学习
- [NLP] 秒懂词向量Word2vec的本质 穆文
- 记一次网易前端实习面试
- JAVA HASHMAP的死循环
- 年和时间
- go语言实现回调函数
- java8新特性普及
- Eclipse 的 jsp 页面代码格式化
- [LeetCode] 547. Friend Circles
- 搬砖之路----MusicPlayer 一个基于Vlc(2.0+)开发的android音乐播放器--浅析在android开发过程中播放器选择之路!
- Linux下软件安装的几种方式
- C++内存管理自我解惑
- Android Studio: JNI 使用小结
- Ubuntu 14.04下安装ns-2.35详细教程
- angularjs自定义过滤理解