文档章节

Java 8新特性(二)

casoc
 casoc
发布于 2015/06/02 16:42
字数 744
阅读 603
收藏 10

集合类的批处理:

        Java8除了Lambda表达式外还提供了另一个重要的特性,即集合的批处理操作,集合类的批处理操作API的目的是实现集合类的“内部迭代”,并期望充分利用现代多核CPU进行并行计算。Java8之前集合类的迭代(Iteration)都是外部的,即客户代码。而内部迭代意味着改由Java类库来进行迭代,而不是客户代码。

        例如Java8以前版本要遍历一个集合通常是:

for(Object o: list) {
    System.out.println(o);
}

        而在Java8中可以配合Lambda表达式:

list.forEach(o -> System.out.println(o));

        集合类中都有forEach方法,方法的参数是一个函数接口Consumer,这个函数式接口有一个accept()方法用来接受单个参数,在forEach方法实现中,accept()接受的参数即为每次遍历集合得到的元素。forEach方法相对于以前的for循环来说也只是用了Lambda使代码更简洁了,但他却是也是串行的操作每个元素,相对于for循环性能上并没有提升,而之前所说的并行执行是由于集合中引入的Stream。

        在Java的文档中给出的Stream定义是:

A sequence of elements supporting sequential and parallel aggregate operations.

意思是Stream是一个支持顺序以及并发的集合处理操作的元素序列

        Stream接口在java.util.stream包下,主要的实现有IntStream、LongStream、DoubleStream等,Stream对象的创建主要有两种方式:

  1. 通过Collection接口的默认方法stream()创建

  2. 通过Stream接口的静态工厂方法of()创建

        而Stream接口提供的方法也大致分为了两类:

  1. 一类对原Stream元素进行筛选、变换、做处理等操作,最终返回一个处理后的新的Stream对象,可以链式调用用多个方法共同处理

  2. 一类是在得到处理后的新Stream后,用来获取想要的非Stream类型结果,如集合、Stream元素中的最大值、过滤后剩余的元素个数等

Stream部分我发现一个写的很详细的博客,想要深入学习可以参考  http://ifeve.com/stream/


双冒号的使用:

        Java8中新加了 ::这种操作符,用来传递方法或者构造方法的引用,这个特性主要是用来简化Lambda表达式,如上面forEach方法的例子,可以简化为:

list.forEach(System.out::println)

        要使用这种方法简化Lambda也是有一些限制的,首先Lambda表达式代码块中的代码必须是直接调用了另外的一个方法,并且方法的参数个数、顺序以及类型都必须和对应接口中的抽象方法一致。同样需要得到构造方法的引用,只需要String::new这样,在类后面::new即可


© 著作权归作者所有

共有 人打赏支持
casoc
粉丝 46
博文 85
码字总数 60735
作品 0
成都
程序员
从java1到java9每个版本都有什么新特性?五分钟了解

     其实,我是个标题党,没有java1的说法,java9的新特性我也没总结。所以,来个关注吧,说不定哪天就出了呢。。。   每次出新版本,大家大概都会这么问,“Java X会有什么特性呢?”...

java进阶架构师
2017/11/13
0
0
Java 9、10、11,哪个才是 Java 程序员的本命?

之前,我们在《Java 10无跳票发布,主推的新特性引争议》的文章中做了一个小的调查,主要是调查现在的Java程序员都在使用哪个版本的Java?根据调查结果,绝大部分的程序员都在使用Java 8。 无独...

Java的博客
07/03
0
0
Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!

前几天写了一篇 Java 8 即将在 2019 年停止免费向企业提供更新的文章,企图迫使用户向更新一代的 Java 版本升级,但让人遗憾的是,小编今天收到了 Oracle Java 版本的升级推送,装完居然是 ...

Java技术栈
04/27
0
5
Java 8会干掉Scala吗?

2014-04-15 孙镜涛 InfoQ 最令人期待的Java 8已于2014年3月18日发布,该版本包含很多令人兴奋的新特性,被认为是自Java 5发布以来对Java做出的最大改变。对于开发者而言,最值得注意的特性包...

Yamazaki
2014/04/23
0
0
Groovy 2018 Roadmap:下一步主打 lambda 和模块化

JVM 动态脚本语言 Groovy 在 5 月底发布了最新的 2.5 版本, 最大的亮点是对宏的支持,允许开发者在创建 compile-time 元编程扩展时直接使用 Groovy 语法,而不是使用内部编译器表示。 Apac...

王练
06/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【mpvue】三

使用了快1个月,陆续整理发现的坑 1、pageA-pageB-pageA-pageC 如果以这种顺序,大概理解成,列表进详情B, 返回列表进入详情C,那么进入详情C的时候,会因为缓存,先展现详情B的内容。解决方...

登天的感觉
13分钟前
0
0
在EXCEL指定SHEET页,指定文字位置,插入批注

Java操作EXCEL文件,利用POI,在EXCEL指定SHEET页中指定文字位置处插入批注 package excel; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.poi.hssf......

zhaochaochao
14分钟前
0
0
一些网站。

UI schema,可以用json定义UI表单:https://jsonforms.io/examples/array

王坤charlie
21分钟前
0
0
百万连接,百亿吞吐量服务的JVM性能调优实战

转载占小狼博客 应用:shark-新美大移动端网络优化(每日接受移动端请求约150亿) 应用特点 : qps比较高,新生代增长飞快 用户的连接需要维持一段时间 单机需要维持海量连接,几十万的级别 以...

BakerZhu
24分钟前
0
0
iOS涂色涂鸦效果、Swift仿喜马拉雅FM、抽屉转场动画、拖拽头像、标签选择器等源码

iOS精选源码 LeeTagView 标签选择控件 为您的用户显示界面添加美观的加载视图 Swift4: 可拖动头像,增加物理属性 Swift版抽屉效果,自定义转场动画管理器 Swift 仿写喜马拉雅FM 可能是最好用...

sunnyaigd
24分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部