Stream流

Stream流的使用

  • 生成流

通过数据源生成流

  • 中间操作

一个流后面可以跟随零个或多个中间操作,其目的主要是打开流,做出某种程度的数据过滤映射,然后返回一个新的流

  • 终结操作

一个流只能有一个终结操作,当这个操作执行后,流就被使用”光“了,无法在被操作,所以这必定是流的最后一个操作forEach()

Stream流的常见生成方式

Collection体系的集合可以使用默认方法生成流

Map体系的集合间接的生成流

数组可以通过Stram接口的静态方法of(T...vaues)生成流

        //Colluction集合
         ArrayList arrayList=new ArrayList();
        Stream stream = arrayList.stream();
        
        
        //Map集合
        Map  map=new HashMap<>();

        Stream stream1 = map.keySet().stream();

        Stream stream2 = map.values().stream();
        
        //数组
        String[] arrs={"hello","java","hi"};
        Stream arrs1 = Stream.of(arrs);
        
        

filter过滤操作

        //Colluction集合
        ArrayList arrayList=new ArrayList();
        arrayList.add("王小明");
        arrayList.add("张小红");
        arrayList.add("李大力");
        arrayList.add("王明");

        //以张开头,且长度大于等于3
        arrayList.stream().filter((String s)->{ return  s.startsWith("王");}).filter((String s)->{return s.length()>=3;}).forEach(System.out::println);


 Stream中间操作之limit&skip

limit:取前几个元素组成一个流

skip:跳过几个元素组成一个流

        //Colluction集合
        ArrayList arrayList=new ArrayList();
        arrayList.add("王小明");
        arrayList.add("张小红");
        arrayList.add("李大力");
        arrayList.add("王明");
        //取前三个数据在控制台输出

        arrayList.stream().limit(3).forEach(System.out::println);
        System.out.println("--------------");
        //跳过三个元素,把剩下的元素在控制台输出

arrayList.stream().skip(3).forEach(System.out::println);




Stream流_第1张图片

stream流中间操作之concat&distinct 

concat:合并两个流为一个流

distinct:返回由该流的不同元素组成的流

        //Colluction集合
        ArrayList arrayList=new ArrayList();
        arrayList.add("王小明");
        arrayList.add("张小红");
        arrayList.add("李大力");
        arrayList.add("王明");

        //取前三个组成一个流
        Stream limit = arrayList.stream().limit(3);
        //取后两个组成一个流
        Stream skip = arrayList.stream().skip(2);
        //合并这两个流输出
      //  Stream.concat(limit,skip).forEach(System.out::println);
        System.out.println("------------------");
        //消除重复元素
        Stream.concat(limit,skip).distinct().forEach(System.out::println);



Stream流_第2张图片

stream流中间操作之sorted&sorted(Comparator comparator) 

    public static void main(String[] args) {
        //Colluction集合
        ArrayList arrayList=new ArrayList();
        arrayList.add("zhangsan");
        arrayList.add("lisi");
        arrayList.add("wangwu");
        arrayList.add("zhaoliu");

        //按照字母顺序把数据在控制台输出
//        arrayList.stream().sorted().forEach(System.out::println);
   //     按照字符串长度把数据在控制台输出,并且当长度相同时,按照自然排序
        arrayList.stream().sorted((o1,o2)->{int num1= o1.length()-o2.length();
        int num2=num1==0?o1.compareTo(o2):0;
        return num2;
        }).forEach(System.out::println);

 stream流中间操作之map&mapToInt

        //map 返回由给定函数应用于此流的元素的结果组成的流


        //mapToInt:返回一个IntStream其中包含将给定 函数应用鱼此流的元素结果
        //arrayList.stream().map(Integer::parseInt).forEach(System.out::println);
        
        arrayList.stream().mapToInt(Integer::parseInt).forEach(System.out::println);

IntStream中有一个sum()求和方法

        //Colluction集合
        ArrayList arrayList=new ArrayList();
        arrayList.add("10");
        arrayList.add("20");
        arrayList.add("30");
        arrayList.add("40");



        int sum = arrayList.stream().mapToInt(Integer::parseInt).sum();
        System.out.println(sum);

 Stream流的常见终结方法

forEach()

count:统计集合中有几个元素

        //Colluction集合
        ArrayList arrayList=new ArrayList();
        arrayList.add("10");
        arrayList.add("20");
        arrayList.add("30");
        arrayList.add("40");


        long count = arrayList.stream().count();
        System.out.println(count);

 

你可能感兴趣的:(JavaSE,java)