主题:流的操作
一、建立:
- 数组创建:
//由数组生成流
String[] array=new String[]{"a","b","c"};
Stream stream1=Arrays.stream(array);
- Collection创建
//由集合生成的流
Collection collection=new ArrayList<>();
Stream stream2=collection.stream();
- 函数创建
//由函数生成的无限流
Stream stream3=Stream.iterate(Double.valueOf(10),m->Math.random()*m);
Stream stream4= Stream.generate(()->Math.random());
- 文件创建:
//由文件生成流
try(Stream stream5=Files.lines(Paths.get("abc.txt"), Charset.defaultCharset())){
stream5.forEach(s-> System.out.println(s));
}catch (IOException e){ }
二、 筛选:
- 原型:中间操作
Stream filter(Predicate super T> predicate);
- demo:
Arrays.asList(3,9,1,8)
.stream()
.filter(i->i>5);
三、 切片:
- 原型:中间操作
Stream skip(long n);
Stream limit(long maxSize);
- demo:
Arrays.asList(3,9,1,8)
.stream()
.skip(1)
.limit(2);
四、映射:
* 普通映射
- 原型:
Stream map(Function super T, ? extends R> mapper);
- demo:
Arrays.asList(3,9,1,8)
.stream()
.map(i->"string:"+i);
* 扁平化映射:
- 原型:中间操作
Stream flatMap(Function super T, ? extends Stream extends R>> mapper);
说明:它的操作分为两个步骤
- 第一步将流中每个元素转化成为stream(不可以转变成为“原始值Stream”)
- 第二步:将上步得到的若干个Stream合并成为一个Stream
- demo: 把若干个字符串遍历出来
- 一次性转化方案
Arrays.asList("abc","bcd")
.stream()
.flatMap(s->Arrays.stream(s.split("")))
.forEach(s-> System.out.println(s));
- 两步转化方案
Arrays.asList("abc","bcd")
.stream()
.map(s->s.split(""))
.flatMap(ary->Arrays.stream(ary))
.forEach(s-> System.out.println(s));
五、查找、匹配、统计、遍历
- 原型:终端操作
Optional findFirst();
Optional findAny();
boolean noneMatch(Predicate super T> predicate);
boolean allMatch(Predicate super T> predicate);
boolean anyMatch(Predicate super T> predicate);
long count();
void forEach(Consumer super T> action);
void forEachOrdered(Consumer super T> action);
六、reduce操作:
- 原型:终端操作
T reduce(T identity, BinaryOperator accumulator);
Optional reduce(BinaryOperator accumulator);
U reduce(U identity,
BiFunction accumulator,
BinaryOperator combiner);
- demo:
//求和
int m=Arrays.asList(4,1,3,9,8)
.stream()
.reduce(0,(prev,current)->prev+current);
//考虑到stream为空的情况
int m1=Arrays.asList(4,1,3,9,8)
.stream()
.reduce((prev,current)->prev+current)
.get();
//类型转换操作后的求和
Integer m2=Arrays.asList("4","1","7","9","8")
.stream()
.reduce(Integer.valueOf(0),(prev,current)->prev+Integer.valueOf(current),(a,b)->0);
七、排序
- 原型:
Stream sorted();
Stream sorted(Comparator super T> comparator);
- demo:
略...