0%

java1.8笔记

####最近一直在看 jdk8的书 觉得jdk8和之前的jdk变化还是挺大
####主要多了如下一些东西
####1:lambda表达式支持(方法引用 )
jdk8增加lambda表达式的支持 可以通过‘->’ 来传递代码片段
和匿名方法很像 但是有一点细微区别
java.util.function包下 提供很多常用的function接口
方法引用其实也是lambda表达式的一种语法糖
####2:stream集合
这种集合 主要是为了计算 一个是有多种操作符可以很轻松的实现一些数据操作、过滤、扁平化、收集等任务
如果条件合适 很方便的实现并行计算 转换成并行stream集合
####3:新的future实现(completableFuture)
新增了一中新的future实现 相应的工具类中 提供很工厂方法去方便将普通任务包装成异步执行的 future任务 可以自定义线程池之类的 来根据不同的环境优化
####4:新的time包
jdk8之前的时间包比较混乱 例如 java.util.Date java.sql.Date 各有各的地方 看起来贼混乱 jdk8 从新整理的time相关的类、包 提供对之前的java.util.Date这样的互相转换方法
####5:interface default方法
java的提供的方法是一直演进的 一般像之前的方法提供兼容性都是从代码上进行兼容 一个是比较麻烦 二个是有点混乱 现在jdk8提供接口中default方法 可以很方便的去兼容之前的代码 但是这个dufault方法 是很麻烦的 各种实现、继承之间的规则变的比较复杂了 相当于换了一种方式实现了多继承 也会遇到其它支持多继承语言中的坑 例如 菱形继承
####6: Optional
这个是学习scala中的optional 可以通过它来实现优雅的防御性编程
从设计上来说 是否用optional包装 可以用来表明这个值是否可以为null
optional也提供map、flatmap、filter几种操作符 功能类似stream中的用法 其中flatmap用的比较多
####7:优化自定义注解
主要是可重复注解
#####总结:工作中使用上jdk8的代码 看起来还是蛮骚的 就是出问题 排查难度会上升一点 特别是lambda中出现问题 stream在做一些对集合中数据进行处理的时候 非常方便 性能也强 如果条件允许还可以很方便的使用并行stream集合、但是直接用并行流的话 效率比不上自己优化过线程池的多线程解决方案