zoukankan      html  css  js  c++  java
  • Stream流

    作用:

    将对象转Stream流 再对流数据进行操作 过滤/修改等操作

    Stream流基本都用到函数式接口

    配合lambda简化代码

    例子

    @Data
    @AllArgsConstructor
    public class Juc6 {
        int id;
        int age;
        String name;
    }
    
    class StreamTest{
        public static void main(String[] args) {
            Juc6 u1 = new Juc6(1,21,"a");
            Juc6 u2 = new Juc6(2,22,"b");
            Juc6 u3 = new Juc6(3,23,"c");
            Juc6 u4 = new Juc6(4,24,"d");
            List<Juc6> list = Arrays.asList(u1,u2,u3,u4);
            //交给Stream流计算
            list.stream().
                    filter((u)->{return u.getId()%2==0;})//过滤对象
                    .filter((u)->{return u.getAge()>21;})
                    .map((u)->{u.setName(u.getName().toUpperCase());
                        return u;})//对对象数据操作
                    .sorted((uu1,uu2)->{return uu2.getName().compareTo(uu1.getName());})//排序
                    .limit(1) //分页
                    .forEach((e)->{ System.out.println(e); });//打印
        }
    }

    点开源码进行代码分析

    list.stream()   将list转stream流
    
    //下面都需要点开源码分析
    filter  //filter过滤 
        Stream<T> filter(Predicate<? super T> predicate);
        发现入参是Predicate 是一个函数式接口
        若忘记参数怎么定义再点开 看到该函数式接口方法是boolean test(T t);
        即可用lambda表达式中方法体返回boolen 来过滤对象
    
    
    map
        <R> Stream<R> map(Function<? super T, ? extends R> mapper);
        同是函数接口Function
        点开Function 看到方法是R apply(T t);
        即可用lambda表达式中方法体出传入参数 自己对数据处理 后再返回
       //如 .map((u)->{u.setName(u.getName().toUpperCase());
                        return u;})//对对象数据操作
    
    
    sorted    //排序
        函数式接口Comparator
        方法是int compare(T o1, T o2);
        即需定义2个入参
        //如上 .sorted((uu1,uu2)->{return uu2.getName().compareTo(uu1.getName());})//排序
    
    
    forEach
        函数式接口Consumer
        方法void accept(T t);
        只有入参 没有返回值
        //如上  .forEach((e)->{ System.out.println(e); })
  • 相关阅读:
    LeetCode15 3Sum
    LeetCode10 Regular Expression Matching
    LeetCode20 Valid Parentheses
    LeetCode21 Merge Two Sorted Lists
    LeetCode13 Roman to Integer
    LeetCode12 Integer to Roman
    LeetCode11 Container With Most Water
    LeetCode19 Remove Nth Node From End of List
    LeetCode14 Longest Common Prefix
    LeetCode9 Palindrome Number
  • 原文地址:https://www.cnblogs.com/hbhb/p/14354319.html
Copyright © 2011-2022 走看看