Stream流

作者: 开心的小哈 | 来源:发表于2022-05-03 21:29 被阅读0次

    体验Stream

    import java.util.ArrayList;
    
    public class MyDemo {
        public static void main(String[] args) {
            //1.创建一个集合,存储多个字符串元素
            //2.把集合中所有以张开头的元素存储到一个新集合
            //3.把张开头的集合中长度为3的存储到新的集合中
            //4.遍历上一步得到的集合
            ArrayList<String> member = new ArrayList<>();
            member.add("张曼玉");
            member.add("张无忌");
            member.add("张三");
            member.add("离死asdf亡");
            member.add("东北人");
            //2.
            ArrayList<String> zhangSt = new ArrayList<>();
            for (String s:member
                 ) {
                if(s.startsWith("张")){
                    zhangSt.add(s);
                }
            }
            System.out.println(zhangSt);
            //3.n
    
            ArrayList<String> lenth3 = new ArrayList<>();
            for (String s:zhangSt
                 ) {
                if(s.length()>=3){
                    lenth3.add(s);
                }
            }
            for (String d:lenth3
                 ) {
                System.out.println(d);
            }
            //上述步骤太复杂可以使用Stream流来代替
            member.stream().filter(s->s.startsWith("张")).filter(s -> s.length()==3).forEach(System.out::println);
        //filter传入条件的lambda
            //最后使用forEach函数进行消费
        }
    }
    
    

    Stream流生产方式
    生成流
    list.stream()
    中间操作
    filter()
    终结操作
    forEach()

    集合中的Stream流使用
    1.collection体系的集合可以使用系统默认方法stream()生成流
    default Stream<E> stream()
    2.map体系的集合间接的生成流
    3.数组可以通过Stream接口的静态方法of(T..value)生成流

    import java.util.*;
    import java.util.stream.Stream;
    
    public class MyDemo {
        public static void main(String[] args) {
    //        1.collection体系的集合可以使用系统默认方法stream()生成流
    //        default Stream<E> stream()
    //        2.map体系的集合间接的生成流
    //        3.数组可以通过Stream接口的静态方法of(T..value)生成流
            //1.
            List<String> member = new ArrayList<>();
            member.add("张曼玉");
            member.add("张无忌");
            member.add("张三");
            member.add("离死asdf亡");
            member.add("东北人");
            Stream<String> stream = member.stream();
            Set<String> set = new HashSet<>();
            Stream<String> stream1 = set.stream();
            //2.
            HashMap<String, Integer> stringIntegerHashMap = new HashMap<>();
            Stream<String> stream2 = stringIntegerHashMap.keySet().stream();//得到键的stream流
            Stream<Integer> stream3 = stringIntegerHashMap.values().stream();//得到值的流
            Set<Map.Entry<String, Integer>> entries = stringIntegerHashMap.entrySet();//得到键值对象的流
    
            //3.
            String [] stray={"hello","java"};
            Stream<String> stray1 = Stream.of(stray);
            Stream<String> hello = Stream.of("hello", "java");
    
        }
    }
    
    

    filter方法

    import java.util.*;
    import java.util.stream.Stream;
    
    public class MyDemo {
        public static void main(String[] args) {
    //        1.collection体系的集合可以使用系统默认方法stream()生成流
    //        default Stream<E> stream()
    //        2.map体系的集合间接的生成流
    //        3.数组可以通过Stream接口的静态方法of(T..value)生成流
            //1.
            List<String> member = new ArrayList<>();
            member.add("张曼玉");
            member.add("张无忌");
            member.add("张三");
            member.add("离死asdf亡");
            member.add("东北人");
         member.stream().filter((String s)->{return s.startsWith("张");}).forEach(System.out::println);
            member.stream().filter((String s)->{return s.length()==3;}).forEach(System.out::println);
            member.stream().filter((String s)->{return s.length()==3;}).filter((String s)->{return s.startsWith("张");}).forEach(System.out::println);
    
        }
    }
    
    

    limit方法:返回此流中的元素组成的流,截取前指定参数个数的数据
    skip方法:跳过指定参数个数的数据,返回有盖流的剩余元素组成的流

    import java.util.*;
    import java.util.stream.Stream;
    
    public class MyDemo {
        public static void main(String[] args) {
    //        1.collection体系的集合可以使用系统默认方法stream()生成流
    //        default Stream<E> stream()
    //        2.map体系的集合间接的生成流
    //        3.数组可以通过Stream接口的静态方法of(T..value)生成流
            //1.
            List<String> member = new ArrayList<>();
            member.add("张曼玉");
            member.add("张无忌");
            member.add("张三");
            member.add("离死asdf亡");
            member.add("东北人");
        //需求1取前三个显示
            member.stream().limit(3).forEach(System.out::println);
            System.out.println("--------------");
            //跳过三个元素把剩下的在控制台暑促
            member.stream().skip(3).forEach(System.out::println);
            System.out.println("---------------");
            //需求三跳过前两个把剩下的前两个输出
            member.stream().skip(2).limit(2).forEach(System.out::println);
        }
    }
    
    
    //concat 合并a和B两个流为一个流
    //disinct 返回由该流的不同元素,组成的流
    
    import java.util.ArrayList;
    import java.util.stream.Stream;
    
    public class Testjava {
        //concat 合并a和B两个流为一个流
        //disinct 返回由该流的不同元素,组成的流,里面运用了equse进行了判断,将重复的只取一个
        public static void main(String[] args) {
            //创建一个集合存储多个字符串
            ArrayList<String> mamber = new ArrayList<String>();
            mamber.add("林檎下");
            mamber.add("San Zhang");
            mamber.add("tangbohu");
            mamber.add("shenlongshi");
            mamber.add("ChengLong Yan");
            mamber.add("San Zhang");
            mamber.add("San Zhang");
            //去前四个数组组成一个流
            Stream<String> s1 = mamber.stream().limit(4);
            //跳过两个数据组成一个流
            Stream<String> s2 = mamber.stream().skip(2);
            //合并1和2得到的流,并把结果输出控制台
    //        Stream.concat(s1,s2).forEach(System.out::println);  //concat处理后在使用时会报错
            //合并1和2得到的流,并把结果输出,要求不能重复
            Stream.concat(s1,s2).distinct().forEach(System.out::println);
         
        }
    }
    
    

    /*
    sored返回由此流的元素组成的流,根据自然顺序排序
    sored返回该流的元素组成的流,根据提供的comparator进行排序
    */

    import java.util.ArrayList;
    import java.util.stream.Stream;
    
    public class Testjava {
      /*
      sored返回由此流的元素组成的流,根据自然顺序排序
      sored返回该流的元素组成的流,根据提供的comparator进行排序
       */
        public static void main(String[] args) {
            //创建一个集合存储多个字符串
            ArrayList<String> mamber = new ArrayList<String>();
            mamber.add("林檎下");
            mamber.add("San Zhang");
            mamber.add("tangbohu");
            mamber.add("shenlongshi");
            mamber.add("ChengLong Yan");
            mamber.add("San Zhang");
            mamber.add("San Ahang");
           //按照字母顺序进行排序输出
    //        mamber.stream().sorted().forEach(System.out::println);
            //按照字符串长度进行排序输出
    //        mamber.stream().sorted((s1,s2)->s2.length()-s1.length()).forEach(System.out::println);
            mamber.stream().sorted((s1,s2)->{
                int num=s1.length()-s2.length();
                int num2=num==0?s1.compareTo(s2):num;//compareTo字符串排完序后再使用compareTo进行排序
                return num2;
            }).forEach(System.out::println);
    
        }
    }
    
    

    /*
    map返回由给定函数应用于此流的元素结果组成的流
    mapToint返回一个intStream其中包含将给定函数应用于此流的元素的结果,然后就可以使用intStream的方法啦
    */

    import java.util.ArrayList;
    import java.util.stream.Stream;
    
    public class Testjava {
      /*
      map返回由给定函数应用于此流的元素结果组成的流
      mapToint返回一个intStream其中包含将给定函数应用于此流的元素的结果,然后就可以使用intStream的方法啦
       */
        public static void main(String[] args) {
            //创建一个集合存储多个字符串
            ArrayList<String> mamber = new ArrayList<String>();
            mamber.add("10");
            mamber.add("20");
            mamber.add("35");
            mamber.add("2");
    
           //将集合中的字符串数据转换为整数之后在控制台输出
    //        mamber.stream().map(Integer::parseInt).forEach(System.out::println);
            //
            mamber.stream().mapToInt(Integer::parseInt).forEach(System.out::println);
            int sum = mamber.stream().mapToInt(Integer::parseInt).sum();
            System.out.println(sum);
            //sum 是IntStream中的
    
    
        }
    }
    
    

    /*
    ForEach对此流的每个元素执行操作
    count()返回此流中的元素数
    */

    import java.util.ArrayList;
    import java.util.stream.Stream;
    
    public class Testjava {
      /*
      ForEach对此流的每个元素执行操作
      count()返回此流中的元素数
       */
        public static void main(String[] args) {
            //创建一个集合存储多个字符串
            ArrayList<String> mamber = new ArrayList<String>();
            mamber.add("林檎下");
            mamber.add("San Zhang");
            mamber.add("tangbohu");
            mamber.add("shenlongshi");
            mamber.add("ChengLong Yan");
            mamber.add("San Zhang");
            mamber.add("San Ahang");
    //把集合中的元素在控制台输出
        mamber.stream().forEach(System.out::println);
        //统计集合由几个以张开头的元素,并把统计结果在控制台输出
            long san = mamber.stream().filter(s -> s.startsWith("San")).count();
            System.out.println(san);
    
    
        }
    }
    
    

    text

    import java.util.ArrayList;
    import java.util.stream.Stream;
    
    public class Testjava {
      /*
    
       */
        public static void main(String[] args) {
            //创建一个集合存储多个字符串
            ArrayList<String> mamber = new ArrayList<String>();
            mamber.add("周润发");
            mamber.add("成龙");
            mamber.add("吴京");
            mamber.add("刘德华");
            mamber.add("李连杰");
            mamber.add("周星驰");
            mamber.add("飞虎队");
    
    
            ArrayList<String> womanList = new ArrayList<String>();
            womanList.add("林青霞");
            womanList.add("张曼玉");
            womanList.add("刘岩");
            womanList.add("林心如");
            womanList.add("贾玲");
            womanList.add("王祖贤");
            //男演员只要名字为3的前三人
            Stream<String> manStream = mamber.stream().filter(s -> s.length() == 3).limit(3);
            //女演员只要姓林的并且不要第一个
            Stream<String> womanStream = womanList.stream().filter(s -> s.startsWith("林")).skip(1);
            //把过滤后的两个流合并在一起
            Stream<String> concat = Stream.concat(manStream, womanStream);
    //        concat.map(Actor::new).forEach(System.out::println);
            concat.map(s->new Actor(s)).forEach(s-> System.out.println(s.getName()));
        }
    }
    
    

    Stream收集方法

    import java.util.*;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    public class Testjava {
        public static void main(String[] args) {
            //创建一个集合存储多个字符串
            ArrayList<String> mamber = new ArrayList<String>();
            mamber.add("周润发");
            mamber.add("成龙");
            mamber.add("吴京");
            mamber.add("刘德华");
            mamber.add("李连杰");
            mamber.add("周星驰");
            mamber.add("飞虎队");
            //的带名字为3个字的流
            Stream<String> stringStream = mamber.stream().filter(s -> s.length() == 3);
            List<String> collect = stringStream.collect(Collectors.toList());
            for (String ss:collect){
                System.out.println(ss);
            }
            Set<Integer> integers = new HashSet<>();
            integers.add(10);
            integers.add(20);
            integers.add(30);
            integers.add(40);
            integers.add(50);
    
    
            //得到年龄大于25的流
            Stream<Integer> integerStream = integers.stream().filter(age -> age > 25);
            //得到stream流操作完毕的数据收集到set集合中并遍历
            Set<Integer> collect1 = integerStream.collect(Collectors.toSet());
            for(Integer ss:collect1){
                System.out.println(ss);
            }
        String star[]={"林檎下,20","张曼玉,50","柳岩,25"};
            //得到字符串年龄数据大于28的流
            Stream<String> stringStream1 = Stream.of(star).filter(s -> Integer.parseInt(s.split(",")[1]) > 28);
            Map<String, Integer> collect2 = stringStream1.collect(Collectors.toMap(s -> s.split(",")[0], s -> Integer.parseInt(s.split(",")[1])));
            Set<String> strings = collect2.keySet();
            for (String key:strings
                 ) {
                Integer value=collect2.get(key);
                System.out.println(key+","+value);
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:Stream流

          本文链接:https://www.haomeiwen.com/subject/tpxfnltx.html