Stream基本知识
- Stream流的来源。可以是集合,数组,I/O channel, 产生器generator 等
- 进行的操作:聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等
- Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格(fluent style)。 这样做可以对操作进行优化, 比如延迟执行(laziness)和短路( short-circuiting)。
- 内部迭代: 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代, 这叫做外部迭代。 Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。
主要用法如上文:forEach,map,filter,limit,sorted,Collectors,summaryStatistics,都是些通用方法
其实就是将集合和数组的数据转化成Stream,再做处理,最后封装成原数据(集合和数组)
map方法给人的感觉就是进行一种自定义运算操作,如下代码
使用代码:
package com.sun.test;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
public class Java8Stream {
public static void main(String[] args) {
//关于集合和数组的Stream操作
System.out.println("关于集合和数组的Stream操作");
List<String> sw = Arrays.asList("bb","cc","","dd","","ee","aa");
List<String> se = sw.stream().filter(s->!s.isEmpty()).collect(Collectors.toList());
List<String> sd = sw.stream().filter(s->!s.isEmpty()).sorted(String::compareToIgnoreCase).
collect(Collectors.toList());
System.out.println(sw);
System.out.println(se);
System.out.println(sd);
sw.stream().filter(s->!s.isEmpty()).sorted(String::compareToIgnoreCase).
collect(Collectors.toList()).forEach(System.out::println);
//Random的Stream操作
System.out.println("Random的Stream操作");
Random ran = new Random();
//limit限制随机数个数
ran.ints().limit(10).forEach(System.out::println);//ints获取整形Stream
//map方法使用
System.out.println("map方法使用");
//先是去除空值,排序,用map进行操作,返回list值,循环打印输出
sw.stream().filter(x->!x.isEmpty()).sorted().map(x->x+"o").
collect(Collectors.toList()).forEach(System.out::println);
//原始sw值
//并没有影响原始sw值
System.out.println("原始sw值");
System.out.println(sw);
}
}
输出结果:
关于集合和数组的Stream操作
[bb, cc, , dd, , ee, aa]
[bb, cc, dd, ee, aa]
[aa, bb, cc, dd, ee]
aa
bb
cc
dd
ee
Random的Stream操作
-1974603326
672975278
-803250443
-858191439
332004765
-1926746164
-968358665
1470637115
-733990614
598957685
map方法使用
aao
bbo
cco
ddo
eeo
原始sw值
[bb, cc, , dd, , ee, aa]
参考:http://www.runoob.com/java/java8-streams.html