1.Stream流的三类方法

1.获取Stream流
创建一条流水线,并把数据放到流水线上准备进行操作
2.中间方法
流水线上的操作。
一次操作完毕之后,还可以继续进行其他操作。
3.终结方法

2.Stream流的获取

单列集合 :集合对象.stream();

双列集合:不能直接获取,需要间接获取

           集合对象.keyset().stream();
           集合对象.entryset().stream();

数组: Arrays.stream(数组名);

同种数据类型的多个数据:

           Stream.of(数据1,数据2,数据3....);

//代码实例
        //单列集合获取Stream流
        ArrayList<String> list = new ArrayList<>(List.of("aaa", "bbb", "ccc"));
        list.stream().forEach(s -> System.out.println(s));
        
        //双列集合获取Stream流
        HashMap<String, Integer> hm = new HashMap<>(Map.of("zhangsan", 23, "lisi", 24, "wangwu", 25, "zhaoliu", 26, "qianqi", 27));
            //通过keySet()方法得到键构成的Set集合
        hm.keySet().stream().forEach(s -> System.out.println(s));
        
            //通过entrySet()方法得到键值对的Set集合
        hm.entrySet().stream().forEach(s -> System.out.println(s));
        
        //数组
        int[] arr = {1, 2, 3, 4, 5};
        Arrays.stream(arr).forEach(s -> System.out.println(s));
        
        //同种数据类型的多个数据
        Stream.of(1,2,3,4,5,6,7,8,9,10).forEach(s -> System.out.println(s));

3.filter

filter()方法会获取流中的每一个数据s, 而在test方法中我们需要重写对s的判断方法, 如果test方法返回结果为true,则当前的s留下, 反之则丢弃

//匿名内部类
        list.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("张");
            }
        }).forEach(s -> System.out.println(s));
//lambda表达式
        list.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));

4.其他常用中间方法

        //limit(long maxsize)截取指定个数的数据
        list.stream().limit(2).forEach(s -> System.out.println(s));

        //skip(long n)跳过指定参数个数的数据
        list.stream().skip(2).forEach(s -> System.out.println(s));

        //(static) Stream.concat(Stream a, Stream b)合并a和b两个流
        Stream.concat(list1.stream(), list2.stream()).forEach(s -> System.out.println(s));

        //distinct(): 去除流中重复的元素,依赖(hashCode和equals方法)
        list.stream().distinct().forEach(s -> System.out.println(s));

5.常用的终结方法

//void forEach(Consumer action): 对此流的每个元素执行操作
//需要重写Consumer中的void accept(T t)方法

//Long count()方法
        List<String> list2 = List.of("张三丰", "张无忌", "张翠山", "王二麻子", "张良", "谢广坤","谢广坤","谢广坤","谢广坤");
        ArrayList<String> list = new ArrayList<>(list2);
        long count = list.stream().limit(2).count();
        System.out.println(count);
//运行结果: 2

6. 收集操作

collect(Collector collector)
工具类Collectors提供了具体的收集方式
public static Collector toList() : 把元素收集到List集合中
public static Collector toSet() : 把元素收集到Set集合中
public static Collector toMap(Function keyMapper,Function valueMapper) : 把元素收集到Map集合中

//代码示例
        ArrayList<Integer> list = new ArrayList<>(List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
        List<Integer> list3 = list.stream().filter(i -> i % 2 == 0)
                .collect(Collectors.toList());
        System.out.println(list3);