美文网首页
java8 ---Stream

java8 ---Stream

作者: wudl | 来源:发表于2021-08-17 23:12 被阅读0次

    1. 集合的Lambda --forEach 使用

    package com.wudl.java8.lambda;
    
    import com.wudl.java8.bean.User;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * @ClassName : LambaMethod
     * @Description :  Lamba 方法的使用
     * @Author :wudl
     * @Date: 2021-08-17 22:35
     */
    
    public class LambaMethod {
    
        public static void main(String[] args) {
    
            //1.list ForEach 的输出
            LambaMethod.LambaList();
            //2.Map 的输出
            LambaMethod.LambaMap();
            //3. List 集合排序
            LambaMethod.getListSort();
        }
    
        public static void LambaList()
        {
            List<String> list = new ArrayList<String>();
            list.add("java");
            list.add("hive");
            list.add("Flink");
    
            list.forEach((num) -> {
                System.out.println(num);
            });
        }
    
        public static void LambaMap()
        {
            Map<String,Object> map = new HashMap<>();
            map.put("java","java-version");
            map.put("hive","hive-version");
            map.put("Flink","Flink-version");
    
            map.forEach((num,value) -> {
                System.out.println(num +"---"+ value);
            });
        }
    
    
    }
    
    // 输出的结果
    "C:\Program Files\Java\jdk1.8.0_241\bin\java.exe" -Dvisualvm.id=4964856337000 "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 
    -----------------LambaList--------------
    java
    hive
    Flink
    -----------------LambaMap--------------
    hive---hive-version
    java---java-version
    Flink---Flink-version
    
    

    1.1 集合的排序实例

    package com.wudl.java8.lambda;
    
    import com.wudl.java8.bean.User;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * @ClassName : LambaMethod
     * @Description :  Lamba 方法的使用
     * @Author :wudl
     * @Date: 2021-08-17 22:35
     */
    
    public class LambaMethod {
    
        public static void main(String[] args) {
            //3. List 集合排序
            LambaMethod.getListSort();
        }
    
    
        public  static  void  getListSort()
        {
            System.out.println("-----------------getListSort--------------");
            List<User> list = new ArrayList<>();
            list.add(new User("java",18));
            list.add(new User("spark",10));
            list.add(new User("doris",15));
            list.add(new User("flink",20));
    
            list.sort((key1,value1) ->
                key1.getAge() - value1.getAge()
            );
    
            list.forEach(value1 ->{
                System.out.println(value1);
            });
        }
    }
    // 输入的结果
    -----------------getListSort--------------
    User(name=spark, age=10)
    User(name=doris, age=15)
    User(name=java, age=18)
    User(name=flink, age=20)
    
    Process finished with exit code 0
    
    

    2.Java8 的Stream 的使用

        java8 引入的流主要是针对集合的操作: 类似Sql 查询数据库
    

    功能 :Stream :非常方便精简的形式遍历集合实现 过滤、排序等。

    Stram 操作.png

    2.1 Stream 流的创建方式

    1. parallelStream为并行流采用多线程执行
    2.Stream采用单线程执行
    3.parallelStream效率比Stream要高。

      List<User> userEntities = new ArrayList<>();
            userEntities.add(new User("mayikt", 20));
            userEntities.add(new User("meite", 28));
            userEntities.add(new User("zhangsan", 35));
            userEntities.add(new User("xiaowei", 16));
            userEntities.add(new User("xiaowei", 16));
    
            userEntities.stream();
            Stream<User> userStream = userEntities.parallelStream();
    

    2.2 将创建的流转化为Set 集合并且打印出来

    package com.wudl.java8.stream;
    
    import com.wudl.java8.bean.User;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Set;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    /**
     * @ClassName : UserStream
     * @Description : Stream  的使用
     * @Author :wudl
     * @Date: 2021-08-17 22:59
     */
    
    public class UseStream {
    
        public static void main(String[] args) {
        //
            UseStream.StreamToSet();
        }
    
        /**
         * 流的创建
         * @return
         */
        public static Stream<User> CreateStream()
        {
            List<User> userEntities = new ArrayList<>();
            userEntities.add(new User("mayikt", 20));
            userEntities.add(new User("meite", 28));
            userEntities.add(new User("zhangsan", 35));
            userEntities.add(new User("xiaowei", 16));
            userEntities.add(new User("xiaowei", 16));
    
            userEntities.stream();
            Stream<User> userStream = userEntities.parallelStream();
            return userStream;
        }
    
        /**
         * 将lIST 转为流 在通过流转化为Set 集合
         */
        public static void StreamToSet()
        {
            Stream<User> userStream = UseStream.CreateStream();
            Set<User> userSet = userStream.collect(Collectors.toSet());
            System.out.println("----------------StreamToSet---------------");
            System.out.println(userSet);
        }
    }
    
    // 打印结果
    Connected to the target VM, address: '127.0.0.1:52982', transport: 'socket'
    ----------------StreamToSet---------------
    [User(name=meite, age=28), User(name=zhangsan, age=35), User(name=xiaowei, age=16), User(name=mayikt, age=20)]
    
    
    Process finished with exit code 0
    
    

    ************************************** 后期追加*************************************

    1.将list 转为流, 在通过流转化为map 集合

       /**
         * 1.将list 转为流, 在通过流转化为map 集合
         */
        public static void StreamToMap() {
            Stream<User> userStream = UseStream.CreateStream();
            Map<String, User> userMap = userStream.collect(Collectors.toMap(new Function<User, String>() {
                       @Override
                       public String apply(User userEntity) {
                           return userEntity.getName();
                       }
                   }, new Function<User, User>() {
    
                       @Override
                       public User apply(User User) {
                           return User;
                       }
                   }
            ));
            userMap.forEach(new BiConsumer<String, User>() {
                @Override
                public void accept(String s, User user) {
                    System.out.println(s + "====" + user.toString());
                }
            });
        }
    

    2.通过流就和 resuce

     /**
         * 2.通过流就和 resuce
         */
        public static void StreamToReduceToSum() {
            Stream<Integer> stream = Stream.of(1, 2, 5, 6, 8);
            // 第一种求和实现
    //        Optional<Integer> reduce = stream.reduce((a1, a2) -> a1 + a2);
            // 第二种求和实现
            Optional<Integer> reduce = stream.reduce(new BinaryOperator<Integer>() {
                @Override
                public Integer apply(Integer o, Integer o2) {
                    return o + o2;
                }
            });
            System.out.println(reduce);
        }
    
    

    3.通过流求出两个流的最大值和最小值 max 和 min

    
        /**
         * 3.通过流求出两个流的最大值和最小值  max  和 min
         */
        public static void StreamMaxAndMin() {
            // 求最小值
            Stream<User> userStream = UseStream.CreateStream();
            Optional<User> max = userStream.max((a1, a2) -> {
                return a1.getAge() - a2.getAge();
            });
            System.out.println("max---" + max);
    
            // 求最小值
            Stream<User> userStreamMin = UseStream.CreateStream();
            Optional<User> min = userStreamMin.min((a1, a2) -> {
                return a1.getAge() - a2.getAge();
            });
            System.out.println("min--" + min);
        }
    

    4. Match 元素返回true 和false

    4.1 anyMatch表示,判断的条件里,任意一个元素成功,返回true
    4.2 allMatch表示,判断条件里的元素,所有的都是,返回true
    4.3 noneMatch跟allMatch相反,判断条件里的元素,所有的都不是,返回true

     /**
         * 4. 根据流匹配一个值 返回  true or false
         *      anyMatch表示,判断的条件里,任意一个元素成功,返回true
         *      allMatch表示,判断条件里的元素,所有的都是,返回true
         *      noneMatch跟allMatch相反,判断条件里的元素,所有的都不是,返回true
         */
        public static void StreamMatch() {
            Stream<User> userStream = UseStream.CreateStream();
            boolean b = userStream.noneMatch(new Predicate<User>() {
                @Override
                public boolean test(User user) {
                    return user.getAge() > 50;
                }
            });
    
            //  5. allMatch  全匹配
            Stream<User> userStream2 = UseStream.CreateStream();
            boolean flink = userStream2.allMatch(new Predicate<User>() {
                @Override
                public boolean test(User user) {
                    return user.getAge()<20;
                }
            });
            System.out.println("allMatch--"+flink);
    
            System.out.println(b);
        }
    

    6. 流的循环

    
        /**
         *  6. 流的循环
         */
        public static void MyStreamFor()
        {
            Stream<User> userStream = UseStream.CreateStream();
            userStream.forEach(new Consumer<User>() {
                @Override
                public void accept(User user) {
                    System.out.println(user.getAge() +"--"+user.getName());
                }
            });
    
            Stream<User> userStreamForeach = UseStream.CreateStream();
            userStreamForeach.forEach((user ->{
                System.out.println("2--"+user.getAge() +"--"+user.getName());
            }));
    
        }
    

    7.Stream过滤器

        /**
         *  7.Stream过滤器
         */
        public  static void StreamFilter()
        {
            Stream<User> userStream = UseStream.CreateStream();
            Stream<User> flink = userStream.filter(new Predicate<User>() {
                @Override
                public boolean test(User user) {
                    return user.getAge() > 20;
                }
            }).filter(new Predicate<User>() {
                @Override
                public boolean test(User user) {
                    return user.getName().equals("Flink");
                }
            });
            flink.forEach(user ->{
                System.out.println(user.toString());
            });
        }
    
    

    8.流的排序

     /**
         *  8.流的排序
         */
    
        public static  void StreamTOSort()
        {
            List<User> userEntities = new ArrayList<>();
            userEntities.add(new User("mayikt", 20));
            userEntities.add(new User("meite", 28));
            userEntities.add(new User("zhangsan", 35));
            userEntities.add(new User("xiaowei", 16));
            userEntities.add(new User("Flink", 22));
            userEntities.add(new User("hdfs", 18));
            List<User> collect = userEntities.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
            collect.forEach(new Consumer<User>() {
                @Override
                public void accept(User user) {
                    System.out.println(user.toString());
                }
            });
        }
    

    9. Stream Skip 和Limit

    
        /**
         *  9. Stream Skip  和Limit
         */
        public static void StreamLimitAndSkip()
        {
            List<User> userEntities = new ArrayList<>();
            userEntities.add(new User("mayikt", 20));
            userEntities.add(new User("meite", 28));
            userEntities.add(new User("zhangsan", 35));
            userEntities.add(new User("xiaowei", 16));
            userEntities.add(new User("Flink", 22));
            userEntities.add(new User("hdfs", 18));
    
            Stream<User> stream = userEntities.stream();
            stream.skip(2).limit(3).forEach(u ->{
                System.out.println(u.toString());
            });
    
        }
    

    相关文章

      网友评论

          本文标题:java8 ---Stream

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