JAVA 8 Streams API 学习札记
来源:互联网 发布:淘宝热搜关键词软件 编辑:程序博客网 时间:2024/06/10 07:50
简介
近期在项目开发中,发现了java 8中一个非常重要的特性Stream,通过它可以很方便的对集合进行各类操作。 根据官方介绍,Stream 是对集合对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。另外由于集合类持有的元素都是存储在内存中,非常巨大的集合类会占用大量的内存,而Stream的元素却是在访问的时候才被计算出来,具有延迟计算的特性;另外Stream的迭代是隐含在对Stream的各种操作中。
程序示例
List<Integer> list = new ArrayList<>();list.add(1);list.add(3);list.add(1);list.add(5);//返回一个List<String>集合,集合中没有重复的元素list.stream().map(it -> String.valueOf(it)).distinct().collect(collectors.toList());//java 8之前List<String> newList = new ArrayList<>();for (Interger n: list) { String str = String.valueOf(n); if (!newList.contains(str)) { newList.add(str) }}
由上面两段代码可知,Java 8使用Stream,代码更加简洁易读。另外Stream可以并行化操作,使用并行化遍历时,数据会被分成多个段,其中每一个都在不同的线程中处理,然后将结果一起处理。
Stream介绍
流的生成除了来自集合外,还可以通过某些静态方法来自动生成。通过使用流的时候,需要首先获取一个数据源,然后对数据进行操作或转换,最后获得想要的结果。类似于管道操作,前一次操作完后返回新的流对象供后面使用。流的操作类型分为三类:Intermediate, Terminal, short-circuiting.
Intermediate操作
一个流可以后面跟随零个或多个该操作,其目的主要是打开流,做出某种程度的数据映射/过滤,然后返回一个新的流,交给下一个操作使用。这类操作都是惰性化,仅调用到此方法,并没有真正的开始流的遍历。此类操作包括:map (mapToInt, flatMap 等)、 filter、 distinct、 sorted、 peek、 limit、 skip、 parallel、 sequential、 unordered
Terminal 操作
一个流只能有一个Terminal操作,当这个操作执行后,流就无法再被操作了。Terminal操作的执行,才会真正开始流的遍历,并且会生成一个结果。此类操作包括:forEach、 forEachOrdered、 toArray、 reduce、 collect、 min、 max、 count、 anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 iterator
Short-circuiting操作
该操作可以让一个无限大的Stream返回一个有限的新stream,另外对于一个terminal操作,对于一个无限大的stream,通过该操作可以在有限的时间计算出结果。此类操作包括:anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 limit
总结
Stream的可以很方便对集合进行操作,并且支持并发操作,可以很多好的适应多线程。并且stream操作是惰性化的。
参考文献
- Java 8 中的 Streams API 详解
- Java 8新特性:全新的Stream API
- JAVA 8 Streams API 学习札记
- Java 8: Streams API
- Streams--Java 8 中的 Streams API 详解
- Java 8 Streams API 详解
- Understanding Java 8 Streams API---reference
- Java 8 中的 Streams API 详解
- Java 8 中的 Streams API 详解
- Java 8 中的 Streams API 详解
- 理解Java 8 Streams API,Collector,Parallelism
- Java 8 中的 Streams API 详解
- Java 8 中的 Streams API 详解
- 【转载】Java 8 中的 Streams API 详解
- Java 8 中的 Streams API 详解
- Java 8 中的 Streams API 详解
- Java 8 中的 Streams API 详解
- Java 8 中的 Streams API 详解
- Java 8 之 Streams API 详解
- Java 8 中的 Streams API 详解
- 关于敏捷迭代的思考
- Maximum Product-UVA 11059
- BP神经网络原理简单介绍以及公式推导(矩阵形式和分量形式)
- 初学编程的人一般会遇到的几个问题
- 基于Metronic的Bootstrap开发框架经验总结(4)--Bootstrap图标的提取和利用
- JAVA 8 Streams API 学习札记
- 【转载】aliyun阿里云Maven仓库地址——加速你的maven构建
- linux 抓包命令tcpdump
- UVALive
- Failed at the bcrypt@0.8.7 install script 'node-gyp rebuild'
- 完美字符串
- java程序将汉字转成拼音的两种方法
- POJ 2357 Labyrinth
- 第八届山东省赛题->Parity check