铂西学习日记---高级Iterator-Stream接口

什么是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文档
         */

    }


}

 

上一篇:05.UE4学习总结.Blueprints to C++.TSet常用方法


下一篇:我的Git手册