作用:
将对象转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); })