Java8
文章平均质量分 74
~~~~
webor2006
码农一个,记录个人成长的点滴~~
展开
-
java8学习之Stream源码分析
上一次已经将Collectors类中的各种系统收集器的源代码进行了完整的学习,而在之前咱们已经花了大量的篇幅对其Stream进行了详细的示例学习,如:那接下来则通过源代码的角度来对Stream的运作原理进行深入的学习,比如:Stream里面提供了这么多方法都是如何实现的?串行流与并行流又是如何调用的?对于并行流它又是如何利用ForkJoin这样的一个框架进行任务的切割和合并的?下面开始:首...原创 2018-02-02 15:43:00 · 69 阅读 · 0 评论 -
java8学习之groupingByConcurrent与partioningBy源码分析
在上一次【http://www.cnblogs.com/webor2006/p/8387656.html】中对于Collectors.groupingBy()方法进行了完整的分析之后,接着继续来分析一下Collectors其它跟它类似的方法:groupingByConcurrent()、partioningBy(),groupingByConcurrent():这个方法在分析最复杂的grou...原创 2018-02-01 13:54:00 · 199 阅读 · 0 评论 -
java8学习之groupingBy源码分析
继续接着上一次【http://www.cnblogs.com/webor2006/p/8366083.html】来分析Collectors中的各种收集器的实现, 对里它里面有个groupingby()方法,这个之前咱们也已经对它详细使用过,但是!!它的实现是比较复杂的,所以这次来仔细分析一下该方法的实现细节,纵览一下它,存在几个重载方式:先来从最基础的开始分析,如下:其中先来看一下该方法...原创 2018-01-30 22:27:00 · 128 阅读 · 0 评论 -
java8学习之Collectors工厂类源码分析与实战
如上一节【http://www.cnblogs.com/webor2006/p/8360232.html】在结尾处谈到的,彻底理解了Collector收集器之后,有必要对其系统Collectors实现的各种非常常见的收集器进行仔细阅读,所以这也是接下来要去完成的,下面开始。对于Collectors类而言,它是一个工厂类,因为它的构造是一个私的有,如下:而对于这个类中有一个静态类去实现Col...原创 2018-01-27 14:57:00 · 123 阅读 · 0 评论 -
java8学习之收集器枚举特性深度解析与并行流原理
首先先来找出上一次【http://www.cnblogs.com/webor2006/p/8353314.html】在最后举的那个并行流报错的问题,如下:在来查找出上面异常的原因之前,当然得要一点点去排查,所以下面会做实验一步步来为找到这个问题而努力。下面咱们将循环次数只为1次,先来观察日志输出,如下:接下来把这个并行特性去掉,同样的代码再次看累加这块的日志输出,发现元素明显变少啦:...原创 2018-01-26 16:32:00 · 67 阅读 · 0 评论 -
java8学习之自定义收集器深度剖析与并行流陷阱
自定义收集器深度剖析:在上次【http://www.cnblogs.com/webor2006/p/8342427.html】中咱们自定义了一个收集器,这对如何使用收集器Collector是极有帮助的,这次基于它再来进一步,争取彻底理解收集器的所有概念,这里再定义一个新的收集器,其实现如下需求:对于一个Set<String>这样一个集合,通过收集器将其转换成Map<Stri...原创 2018-01-25 21:31:00 · 69 阅读 · 0 评论 -
java8学习之自定义收集器实现
在上次花了几个篇幅对Collector收集器的javadoc进行了详细的解读,其涉及到的文章有:http://www.cnblogs.com/webor2006/p/8311074.htmlhttp://www.cnblogs.com/webor2006/p/8318066.htmlhttp://www.cnblogs.com/webor2006/p/8324390.html而系统有...原创 2018-01-24 16:46:00 · 65 阅读 · 0 评论 -
java8学习之比较器深入
继续接着上次【http://www.cnblogs.com/webor2006/p/8331498.html】的比较器进行探究,上次排序采用是的利用Collections.sort()进行的,下面采用List集合本身的sort()方法【Java8才加入的】,其使用基本上类似:接下来同样改用Lambda表达式:接下来需求升级:先对字符串的长度升序排序,如果字符串的长度有相同的则按字符串...原创 2018-01-24 15:31:00 · 76 阅读 · 0 评论 -
java8学习之比较器详解与类型推断特例
比较器详解:这次来对比较器进行一个学习,比较器(Comparator)这个是在JDK1.2就提出的概念,只是说JAVA8针对它进行了一定的扩充,更加方便咱们使用,其中唯一的抽象方法如下:而JAVA8中对这个接口进行扩展的当然就是一些默认或静态方法啦,如:下面来粗略的来了解一下这新增的具体实现的方法,其实大体有三大类:首先看一下reversed(),从字面意思就是对其顺序进行反序嘛...原创 2018-01-22 22:34:00 · 70 阅读 · 0 评论 -
java8学习之收集器用法详解与多级分组和分区
收集器用法详解:在上次已经系统的阅读了Collector收集器的Javadoc对它已经有一个比较详细的认知了,但是!!!它毕境是只是一个接口,要使用的话还得用它的实现类,所以在Java8中有它进行了实现,而且也只有唯一的一个实现,其实现类名叫:CollectorImpl,它在咱们已经使用过N次的Collectors类中,如下:其把它的完整代码贴出来,如下:/** * Simp...原创 2018-01-21 21:57:00 · 73 阅读 · 0 评论 -
java8学习之Collector复合与注意事项
接着上一次【http://www.cnblogs.com/webor2006/p/8318066.html】继续对Collector进行javadoc详读,上一次读到了这:接下来一条条来过目一下:要理解这段说明,则首先先要了解Collector接口的三个泛型,如下:比如说:其实也就是累积生成的集合类型,如:理解了这三个泛型的含义之后,接下来再来看一下对于Collecto...原创 2018-01-21 15:29:00 · 67 阅读 · 0 评论 -
java8学习之Collector同一性与结合性分析
继续沿着上一次【http://www.cnblogs.com/webor2006/p/8311074.html】Collector接口的javadoc进行阅读,在继续阅读之前,其中有个比较难理解的地方需要再解释一下,如下:上面的javadoc描述的到底是怎么一回事呢?下面来好好理解下:对于combiner()方法是针对并行流(parallelStream())而言的,既然是并行流,当然...原创 2018-01-19 17:25:00 · 93 阅读 · 0 评论 -
java8学习之Collector源码分析与收集器核心
之前已经对流在使用上已经进行了大量应用了,也就是说对于它的应用是比较熟悉了,但是比较欠缺的是对于它底层的实现还不太了解,所以接下来准备大量通过阅读官方的javadoc反过来加深对咱们已经掌握这些知识更加深层次的理解,这个阅读会是一个比较枯燥的,但是它的价值是非常非常大的,也就是要达到知其然知其所以然的目的。这里先以一个咱们之前用过的例子为例,以它做为咱们分析源码的一个入口,新建一个学生类:...原创 2018-01-18 16:54:00 · 77 阅读 · 0 评论 -
java8学习之Stream分组与分区详解
Stream应用:继续举例来操练Stream,对于下面这两个集合:需求是:将这两个集合组合起来,形成对各自人员打招呼的结果,输出的结果如:"Hi zhangsan"、"Hi lisi"、"Hi wangwu"、"Hi zhangliu";"Hello zhangsan"、"Hello lisi"、"Hello wangwu"、"Hello zhangliu";"你好 zhangsan...原创 2018-01-18 15:10:00 · 294 阅读 · 0 评论 -
java8学习之流的短路与并发流
并发流:从api的角度来看,其实跟咱们之前一直在用的stream()方式差不多,但是底层是有明显的不同,所以这里初步先对并发流有一个基本的认识, 说到串行与并行,最直观的感受就是效率的不同,所以下面以一个相同条件下用串行流与并行流实现看具体耗时为例,来直观的感受一下它们两者在时间效率上的不同,如下:生成500万个UUID,然后对其进行排序,最后看一下排序在串行与并行流中的耗时时间,具体做法如...原创 2018-01-17 16:18:00 · 98 阅读 · 0 评论 -
java8学习之内部迭代与外部迭代本质剖析及流本源分析
关于Stream在Java8中是占非常主要的地位的,所以这次对它进行进一步探讨【这次基本上都是偏理论的东东,但是理解它很重要~】,其实流跟咱们数据库学习当中的sql语句的特点是非常非常之像的,为什么这么说,下面以这个sql语句举例说明:“select name from student where age > 20 and address = 'beijing' order by age...原创 2018-01-17 13:41:00 · 72 阅读 · 0 评论 -
java8学习之Stream陷阱剖析
上一次【http://www.cnblogs.com/webor2006/p/8297603.html】在最后用stream.iterate()生成了6个奇数,接着基于它来实现如下需求:找出该流中大于2的元素,然后再将每个元素乘以2,然后忽略掉流中的前两个元素,然后再取流中的前两个元素,最后求出流中元素的总和。那具体如何来实现呢?下面一个个条件来实现:①、找出该流中大于2的元素。很显然这是一...原创 2018-01-16 22:24:00 · 89 阅读 · 0 评论 -
java8学习之Stream实例剖析
继续操练Stream,直接上代码:而咱们要返回ArrayList,显示可以用构造引用来传递到里面,因为它刚好符合Supplier函数式接口的特性:不接收参数返回一个值,所以:接下来试着将Stream转换成其它集合类型,比如:Set,如下:接下来将集合中的字符串元素拼成一起然后再输出出来,继续可以用stream.collect()方法来实现,如下:下面提出新的需求,对其集合中的所有...原创 2018-01-16 17:07:00 · 70 阅读 · 0 评论 -
java8学习之Stream深度解析与源码实践
继续对流进行学习,首先先说明一下流的特点:1、Collection提供了新的stream()方法。2、流不存储,通过管道的方式获取值。3、本质是函数式的,对流的操作会生成一个结果,不过并不会修改底层的数据源,集合可以作为流的底层数据源。其中需要注意标红的说明,也就是说对于流操作它的源数据是不会被更改的,另外还有一点需要有一个认知:对于一个流可能有若干个中间操作,对于这些操作并非降低了整体...原创 2018-01-15 22:11:00 · 77 阅读 · 0 评论 -
java8学习之Stream介绍与操作方式详解
关于默认方法【default method】的思考:在上一次【http://www.cnblogs.com/webor2006/p/8259057.html】中对接口的默认方法进行了学习,那在Java8中在接口中接出默认方法是为了解决什么问题或者说规避什么问题呢?凡是在JDK引入一个新的概念肯定是专家们经过了一定的权衡才加入的,那加入默认方法的具体原因是啥呢?其实主要是为了解决Java8的向后...原创 2018-01-13 22:30:00 · 121 阅读 · 0 评论 -
java8学习之方法引用详解及默认方法分析
方法引用:之前花了很多时间对Lambda表达式进行了深入的学习,接下来开启新的主题---方法引用(Method References),其实在之前的学习中已经使用过了,如:那方法引用跟Lambda表达式是一种什么关系呢?其实可以理解为它是Lambda表达式的一个语法糖(Syntactic sugar),什么是语法糖呢,可以看一下百科:在很多时候在能使用Lambda表达式实现的功能,...原创 2018-01-10 15:53:00 · 77 阅读 · 0 评论 -
java8学习之Optional深入详解
自上次【http://www.cnblogs.com/webor2006/p/8243874.html】函数式接口的学习告一段落之后,这次来学习一下Optional,它并非是函数式接口的概念,点击查看源码便知:那它是用来干嘛的呢?其实用它是用来避勉非常常见的NPE(NullPointerException),我想对于java程序猿来说它是再亲切不过的了,往往项目上线之后由于它的存在可能会导致...原创 2018-01-09 15:11:00 · 110 阅读 · 0 评论 -
java8学习之Supplier与函数式接口总结
Supplier接口:继续学习一个新的函数式接口--Supplier,它的中文意思为供应商、提供者,下面看一下它的javadoc:而具体的方法也是相当的简单,就是不接受任何参数,返回一个结果:对它有了大概的了解之后,下面用代码来使用一下它:貌似这函数的使用相当简单呀,但是简单并非是它的用处少,那它到底可以应用在现实中的什么场合之下呢?工厂就是其一,因为工厂有时里面是不接收参数的...原创 2018-01-08 17:42:00 · 62 阅读 · 0 评论 -
java8学习之Predicate深入剖析与函数式编程本质
上次【http://www.cnblogs.com/webor2006/p/8214596.html】对Predicate函数接口进行了初步的学习,其中提到了在未来要学习的Stream中得到了大量的应用, 正因为很重要,所以这次再详细的对它进行学习,其中还包含它里面定义的一些默认的方法,为之后的学习打下良好的基础。这里还是以集合过滤做为例子,该集合存放的全是数字,然后提出四个过滤条件:①、从集...原创 2018-01-06 22:58:00 · 74 阅读 · 0 评论 -
java8学习之BiFunction函数式接口实例演示&Predicate函数式接口详解
BiFunction函数式接口:在上次中已经对BiFunction接口进行了初步的认识,这里对它进一步学习,这里打算新建一个Person实体,然后新建若干个Person的实例存放在集合中,最后再根据若干条件来从集合中挑选满足指定条件的元素,下面开始:然后新建几个Person对象存放在集合元素中:接下来从集合中查找满足指定条件的元素,当然这里不采用传统的方式去做,而是采用函数式风格的方式...原创 2018-01-06 16:32:00 · 81 阅读 · 0 评论 -
java8学习之Function与BiFunction函数式接口详解
Function接口:上次中已经使用了Function的apply()方法,但是在这个接口中还存在三个具体实现的方法,如下:下面来仔细的将剩下的方法学习一下:compose():首先来读一下该方法的javadoc的描述:一路读下来貌似还是有点懵,感觉好绕,下面再来看一下它的具体实现,这样可以就容易理解一些:说白了,这个方法就是可以组合多个Function,由于该函数最...原创 2018-01-05 14:59:00 · 126 阅读 · 0 评论 -
java8学习之Lambda表达式继续探讨&Function接口详解
对于上次【http://www.cnblogs.com/webor2006/p/8186039.html】已经初步引入的Java8中Stream流的概念,其中使用了map的操作,它需要接受一个Function这样的函数式接口,回顾一下:而这次专门对Function这个函数式接口进行进一步学习,因为这个函数式接口是比较重要的,先查看一下该接口的javadoc:另外还有三个方法,两个默认...原创 2018-01-04 16:03:00 · 94 阅读 · 0 评论 -
java8学习之Lambda表达式深入与流初步
Lambda表达式深入:在上一次【http://www.cnblogs.com/webor2006/p/8135873.html】中介绍Lambda表达式的作用时,其中说到这点:如标红处所说,既然Lambda表达式是一个对象,而且必须依附于一类特别的对象类型叫函数式接口,那么如果咱们给出了一个Lambda表达式,那这个表达式对应一个什么样的函数式接口呢?答案是:这个类型的判定必须依附于上...原创 2018-01-03 22:20:00 · 66 阅读 · 0 评论 -
java8学习之深入函数式接口与方法引用
函数式接口:函数式接口【FunctionalInterface】是整个Lambda表达式的一个根源,换句话来说java8中的Lambda表达式要想彻底掌握,前提是要彻底理解好函数式接口,所以这次继续对函数式接口进行巩固。先回顾一下上一次通过读FunctionalInterface这个注解的javadoc之后的三点总结【参考:http://www.cnblogs.com/webor2006/p...原创 2017-12-28 15:18:00 · 74 阅读 · 0 评论 -
java8学习之Lambda表达式初步与函数式接口
对于Java8其实相比之前的的版本增加的内容是相当多的,其中有相当一大块的内容是关于Lambda表达式与Stream API,而这两部分是紧密结合而不能将其拆开来对待的,但是是可以单独使用的,所以从学习的顺序来说首先得要学好Lambda表达式,然后再学习Stream API,最后再把这两者有机的结合起来,而这两部分涉及的知识体系又非常的多,很多东西都改变了以往对java这种面向对象语言的基本认识...原创 2017-12-25 22:39:00 · 78 阅读 · 0 评论 -
Stream知识点总结及源码阅读
上次【http://www.cnblogs.com/webor2006/p/7795596.html】对Stream进行了简单的学习,这次继续学习Stream,还是结合java8 in action这本书来进行学习。在书中作者用一个简短的一句话来概括什么是Stream,如下:而这句话中描述了三个概念:那结合咱们的代码来进一步阐述下上面的三个概念:另外Stream操作还有如下两个特点...原创 2017-11-23 22:11:00 · 65 阅读 · 0 评论 -
Stream入门及Stream在JVM中的线程表现
继上次学习过Java8中的非常重要的Lambda表达式之后,接下来就要学习另一个也比较重要的知识啦,也就如标题所示:Stream,而它的学习是完全依赖于之前学习的Lambda表达式。小实验引入:这里继续参照java8 in action,关于Stream也是有专门章节去介绍的:下面就正式开启Stream的学习之旅,这里先做一个实验,用实验来引起Stream,而这实验来源于书中,关于菜方面...原创 2017-11-06 22:31:00 · 78 阅读 · 0 评论 -
Lambda方法推导(method references)
在上一篇【http://www.cnblogs.com/webor2006/p/7707281.html】中提到了方法推导的东东:这里说细的学习一下它,下面走起!Method references【方法推导】:编译运行:而对于上面的代码可以用Lambda更加精简:不多解释,然后对于上面的代码还能进一步精简,这时就得用到Lambda的方法推导啦,如下:可以打一...原创 2017-10-30 22:35:00 · 88 阅读 · 0 评论 -
Lambda使用深入解析
这一次继续对Lambda表达式进行深入,因为它实在太重要了,这次会涉及到java.util.function中的一些新的FunctionalInterface的使用,用它来进一步巩固对Lambda表达式的理解。进一步理解FunctionalInterface:在java8开篇中就已经对什么是functionalinterface已经做了初步阐述:有唯一一个抽象方法,也可以包含static和d...原创 2017-10-21 22:51:00 · 74 阅读 · 0 评论 -
Lambda表达式语法进一步巩固
上一次已经初步使用到了Lambda表达式了,这次再次对它的语法进行一下巩固,因为它实在是太重要的,所以多花时间彻底理解它是非常有必要的。在"Java8 in Action"一书中对Lambda表达式有如下描述,做个了解:下面则用代码去使用Lambda表达式来加深对它的印象,会有各种不同的形式,其中还会涉及到一些使用判断它对错的地方,总之这次纯练Lambda表达式。对于集合的排序我想肯定...原创 2017-10-21 16:33:00 · 68 阅读 · 0 评论 -
JAVA8初探-让方法参数具备行为能力并引入Lambda表达式
关于JAVA8学习的意义先来贴一下某网站上的对它的简单介绍:“Java 8可谓Java语言历史上变化最大的一个版本,其承诺要调整Java编程向着函数式风格迈进,这有助于编写出更为简洁、表达力更强,并且在很多情况下能够利用并行硬件的代码。Java 8所带来的函数式编程特性使得Java从此屹立于函数式编程的世界,这是Java这门“古老的”编程语言自从发布以来变化最大的一个版本,在很多地方从根本上改变...原创 2017-10-15 16:47:00 · 82 阅读 · 0 评论