定义Stream
可以通过of来定义stream,也可以通过凑集来转成stream。
Stream<String> stream = Stream.of(\"大众java\公众, \公众css\公众, \"大众php\"大众);

stream = Arrays.asList(\"大众张三\公众, \"大众张三丰\"大众, \"大众张大佛爷\"大众, \"大众张\"大众).stream();
也可以利用generate产生无限数量的stream,当然可以用limit方法限定
下面的语句将产生无数的随机数字,将一贯循环下去
Stream<Double> dsStream = Stream.generate(Math::random);
dsStream.forEach(System.out::println);
利用Stream
filter方法的利用,filter顾名思义,过滤的浸染,怎么过滤呢?
比如说我们有个姓名的凑集,想要统计出凑集里名字的字数大于1的数量有多少
首先是不该用stream的传统方法
List<String> contents = Arrays.asList(\公众张三\"大众, \公众张三丰\"大众, \"大众张大佛爷\"大众, \公众张\"大众);
int count = 0;
for (String con : contents) {
if(con.length() > 1) {
count++;
}
}
System.out.println(count);
下面是利用stream之后的代码,一行就搞定了,在filter方法里用lambda表达式进行过滤,然后用count方法统计出符合条件的数量。
long new_count = contents.stream().filter(con -> con.length() > 1).count();
System.out.println(new_count);
当然如果你的数据量比较多,而你希望统计的速率更快时,可以利用并行处理的stream来操作。
new_count = contents.parallelStream().filter(con -> con.length() > 1).count();
map方法的利用,map实在便是将stream中的数据映射成 output Stream 的其余一个元素。全部循环的过一遍。
利用map可以将stream中的值都转成大小写,如果用List的话还得循环变量然后取toUpperCase()
Stream<String> stream = Stream.of(\"大众java\"大众, \公众css\"大众, \"大众php\"大众);
stream.map(String::toUpperCase).forEach(System.out::println);
flatMap的利用和map一样,不同的点在于flatMap是将多个stream中的多个数据凑集连接起来成为一个终极的stream。
Stream<List<Integer>> number_stream =
Stream.of(
Arrays.asList(10),
Arrays.asList(22, 33),
Arrays.asList(44, 55, 66)
);
number_stream.flatMap((c) -> c.stream()).forEach(System.out::println);
终极的结果就变成了Stream<Integer>
输出结果便是10,22,33,44,55,66