什么是Stream?
Stream是元素的集合,这点让Stream看起来用些类似Iterator;可以支持顺序和并行的对原Stream进行汇聚的操作;
我们可以把Stream当成一个高级版本的Iterator。原始版本的Iterator,用户只能一个一个的遍历元素并对其执行某些操作;高级版本的Stream,用户只要给出需要对其包含的元素执行什么操作,比如“过滤掉长度大于10的字符串”、“获取每个字符串的首字母” 等,具体这些操作如何应用到每个元素上,就给Stream就好了!
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class StreamDemo {
public static void main(String[] args) {
streamDemo1();
}
/**
* Stream 接口:不是存储数据结构,数据源可以是一个集合,为了函数式编程而被创造,
* 懒惰式执行,只有真正用到的时候才会使用,数据只能被消费一次,所以特别注意:Stream 流的注意事项:Stream不调用终止方法,中间的操作不会执行。
*
* 两种类型的操方法:
* 1.中间操作(生成一个Stream)
* 2.结束操作(执行计算操作)
*
*
*/
public static void streamDemo1(){
/**
* 获取Stream --- collection(集合)中自带stream()方法返回一个stream对象
*/
// List<String> list = new ArrayList<>();
// Stream<String> stream1 = list.stream();
Stream<String> stream = Stream.of("good","good" ,"study","day","day","up");
//两个集合转换为一个流
Stream<List<Integer>> listStream = Stream.of(Arrays.asList(1, 2, 3), Arrays.asList(4, 5));
/**
* 遍历
*/
//foreach方法--结束操作,因为什么也不返回,输出完就无法操作了
// stream.forEach((str)->System.out.println(str));
// stream.forEach(System.out::println);
/**
* 过滤
*/
//filter --中间操作,因为返回的还是stream,可以进行进一步的操作,所以可以链式操作
//Stream<T> filter(Predicate<? super T> predicate); 断言式接口
// stream.filter((s)->s.length()>3).forEach(System.out::println);
/**
* 去重
*/
//distinct
// stream.distinct().forEach(s-> System.out.println(s));
/**
* 映射(执行操作后再映射)
*/
//map
// stream.map(s->s.toUpperCase(Locale.ROOT)).forEach(System.out::println);
/**
* 平摊 --- 比如一个流中含有两个集合,一个集合有三个元素,另一个集合有两个元素,通过映射就能平摊为装有一个含5个元素集合的流
*/
//flatMap
// listStream.flatMap(list->list.stream()).forEach(s-> System.out.println(s));
/**
* 合并流 --- 合并多个元素并产生单个值。
*/
//reduce -- 求最大值,最小值,所有数相加...,此处为字符串连接,中间用空格连接
// String s1 = stream.reduce((s, s2) -> s + " " + s2).get();
// System.out.println(s1);
/**
* 收集 --- 当我们对 Stream 流中的数据操作完成之后,如果需要将流的结果进行保存,方便我们接下来对结果的继续操作
*/
//collect --- 配合 Collectors工具类 转化为集合、数组...
List<String> collect = stream.collect(Collectors.toList());
collect.forEach(System.out::println);
/**
* 更多方法看API文档
*/
}
}