一个语言要想一直有活力,它也须要跟随着时代的变化去进步,Java做为一个古老的语言,它其实有太多的历史包袱,在改变的过程当中须要考虑不少,可是它也在慢慢的演变,巩固本身的城墙,不让本身被遗忘在历史中(很多的编程语言已经随着时间的推移,消失在人们的视线中)。固然,做为一个拿Java语言当成主语言的程序员,它的进步其实也在延长咱们的职业生涯。java
Java8带来了不少新的特性,虽然Java8发布已经好久了,可是一直没有系统的学习,因此这部分一直没有进行总结。前东家考虑到与以前系统的兼容,技术标准将JDK7做为开发工具,这样也没法利用Java8带来的新特性。其实Java做为一个普遍应用的语言来讲,它本身的发布周期已经考虑了向前兼容,因此即便升级了JDK版本,其实也不会带来太大的困扰,追随最新的技术,让员工可以学习到新的技术标准,其实也是让员工更加稳定的一种策略,同时在解决问题的同时,既获得了锻炼,同时也得到了成就感。这点也很重要。程序员
因此当你想要express
已经不须要去实现一个匿名类了,匿名类太多的无用代码,直接传递Lambda函数更加简洁,易读。
Lambda声明方式(arg1, arg2,...) -> {statement}
,其中单句的return expression;
能够简写为(arg1, arg2,...) -> expression
。编程
Stream的强大在于它可让你以声明性的方式处理数据集,同时,若是数据处理过程当中数据处理过程,处理器以及收集器(这些后面会介绍)没有反作用(函数式编程思想里的一个概念),Stream能够很简单,方便的利用多核架构的优点,自动的并行执行。因此它的两个强大优势:声明式数据处理,自动的并行执行。让咱们看看这两个Stream的优点,当你熟练使用,必定会对它爱不释手的。
api
若是你了解RxJava背后的思想,其实这个和RxJava使用很是类似,固然RxJava功能比Stream要强大一些,可是思考的时候也是利用这种图形来思考数据处理,RxJava是简化异步编程的一种模型,若是不了解能够去学习一下,很方便的一个工具。这里多扯一句,如今高并发的环境下,对异步的需求愈来愈多,这样在IO密集的场景下节省资源,能够支持高并发,可是异步编程一个缺点就是不符合人们的思考习惯,因此写起来很复杂。RxJava的思想必定程序上减小了这种不方便。
可是新进的语言Go就从另一种角度解决了这个问题,它在runtime支持协程的概念,你能够理解协程就是能够共享一个线程的几个程序块,由程序员去管理协程之间的切换。这个好处是充分利用了线程,而且能够容忍用户以同步的模型去编写代码,解决了异步编程中不符合人们思考的习惯。固然这只是我粗鄙的理解,Go语言是值得学习的语言,能够拿来做为一个备选语言学习。架构
Steam上的操做能够分为两大类操做并发
中间操做
异步
终端操做
编程语言
Stream上有一个很是好用的终端操做,它就是收集器。Java中提供了一些预约义的收集器,这些收集器均经过Collector
类提供的工厂方法建立,按照功能分类以下。函数式编程
Stream的并行数据处理这部分暂时不提,其中涉及到并行流底层的实现,并且还有如何自定义的分割流,须要明白其原理才能正确的使用。这里暂时先记住Stream能够透明的并行数据处理,提升程序效率。
Java历史已经好久了,可是目前为了让集合支持Stream接口,咱们须要针对集合提供一个stream的方法,可是已有不少的第三方库实现了Collection接口,若是贸然在接口中添加方法,则会破坏向前兼容的属性。因此Java8提供了默认方法,可以保持向前兼容。
可是默认方法的引入在某些状况下会引入一些冲突,相似C++多继承中的菱形继承问题,这里Java8有一个解决冲突的规则,
Optional就是防止NullPointerException的出现而存在的一个特性,其实它在语义方面给予咱们更多更多的代码可读性,设想当一个类的属性使用Optional进行包装,使用这个属性的人就能够了解到这个属性可能为null值,使用的时候就会当心谨慎,可是当一个属性没有使用Optional包装,也就是说我能够放心的使用该引用,而不须要担忧NullPointerException。可是这须要一个team的约定。
Optional也能够在某些须要断定引用是否为null的地方去除if else判断来使得代码更加简洁。
这个接口使得灵活的完成组合式的异步编程,是针对Future接口进一步的功能加强,可是相对于RxJava这种异步编程库,其语义仍是差一些,不过仍是能够了解一下的。
Java8解决的另一个重要问题是解决以前老版本Java中java.util.Date
类以及其余用于建模日期时间类设计上的缺陷(易变性、糟糕的偏移值、默认值和命令)
关于Java中日期时间的操做,之后尽可能使用java.time
包下的几个新的类,包含LocalDate
, LocalTime
, Instant
, Duration
和Period
。
Java不断的革新本身使得本身适应如今的编程场景,做为一名技术人员固然也须要不断的更新本身的知识,保证本身也不断的跟随着浪潮前进。