package J20250724.demo02_function_program;

import java.util.ArrayList;
import java.util.function.Predicate;
import java.util.stream.Stream;

/**
 * @author WanJl
 * @version 1.0
 * @title Demo03_
 * @description
 * @create 2025/7/24
 */
public class Demo03_ {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        list.add("万事如意");
        list.add("万家灯火");
        list.add("万JL");
        list.add("万达");
        list.add("张三");
        list.add("张老三");
        list.add("万元户");
        list.add("万宝路");
        //filter过滤
        list.stream().filter(s->{
            return s.startsWith("张");
        }).forEach(s-> System.out.println(s));

        System.out.println("--------------------");
        //Stream<T> limit()   返回这个流中的元素组成的流，截取指定参数个数的数据
        //Stream<T> skip()    跳过指定参数个数的数据，返回有该流剩余的元素组成的流

        //截取前3个元素在控制台输出
        list.stream().limit(3).forEach(System.out::println);
        System.out.println("--------------------");
        //跳过3个元素把剩下的元素在控制台输出
        list.stream().skip(3).forEach(System.out::println);
        System.out.println("--------------------");

        //跳过2个元素，把剩下的元素中的前3个元素在控制台输出
        list.stream().skip(2).limit(3).forEach(System.out::println);


        //static<T> Stream<T> concat(Stream a,Stream b) 合并a和b两个流为一个流
        //Stream<T> distinct()    返回这个流的不同元素(使用equals比较)组成的流

        //需求：获取前4个元素组成一个流
        Stream<String> s1 = list.stream().limit(4);
        //需求：跳过前2个元素剩下的元素组成一个流
        Stream<String> s2 = list.stream().skip(2);
        //需求：合并前两个需求得到的流，并且把结果在控制台输出
        Stream.concat(s1,s2).forEach(System.out::println);
        //需求：合并需求1和需求2得到的流，并且把结果放在控制台输出，要求字符串元素不能重复。
        Stream.concat(s1,s2).distinct().forEach(System.out::println);

        //    void forEach(Consumer action)   对当前流的每个元素执行操作
        //    long count()    返回当前流中的元素数
        long count = list.stream().count();
        System.out.println("其实就是集合的长度："+count);

        //需求：统计集合中万开头的元素数量
        long count1 = list.stream().filter(s -> s.startsWith("万")).count();
        System.out.println(count1);

        //需求：遍历集合
        list.stream().forEach(System.out::println);

    }
}
