Java8新增的Stream流大大减轻了我们代码的工作量,但是Stream流的使用方式很多,实际使用的时候很容易忘记。整理一下供大家参考。一、概述Stream使用一种类似于用SQL语句从数据库中查询数据的直观方式来操作和表达对Java集合的高层抽象。StreamAPI可以大大提高Java程序员的生产力,让程序员写出高效、干净、简洁的代码。这种风格把待处理元素的集合看成一个流,在管道中传输,可以在管道的节点上进行处理,如过滤、排序、聚合等。2.创建2.1集合有自己的Stream方法Listlist=newArrayList<>();//创建一个顺序流Streamstream=list.stream();//创建一个并行流Stream<字符串>parallelStream=list.parallelStream();2.1通过Arrayarray={1,2,3,4,5}创建int[]数组;IntStreamstream=Arrays.stream(数组);2.3使用Stream的静态方法创建Streamstream=Stream.of(1,2,3,4,5);Streamstream=Stream.iterate(0,(x)->x+3).limit(3);//输出0,3,6Streamstream=Stream.generate(()->"Hello").limit(3);//输出Hello,Hello,HelloStreamstream=Stream.generate(Math::random)。限制(3);//输出3个随机数2.3值流//生成有限的常量流IntStreamintStream=IntStream.range(1,3);//输出1,2IntStreamintStream=IntStream.rangeClosed(1,3);//输出1,2,3//生成算术序列IntStream.iterate(1,i->i+3).limit(5).forEach(System.out::println);//Output1,4,7,10,13//生成无限常量数据流IntStreamgenerate=IntStream.generate(()->10).limit(3);//输出10,10,10和LongStream和DoubleStream都有这些方法3.用于初始化一些数据,在例子中使用。publicclassDemo{classUser{//nameprivateStringname;//年龄私有整数年龄;}publicstaticvoidmain(String[]args){Listusers=newArrayList<>();users.add(新用户("Tom",1));users.add(新用户("Jerry",2));}}3.1遍历forEach//循环输出用户对象users.stream().forEach(user->System.out.println(user));3.2findfind//取出第一个对象Useruser=users.stream().findFirst().orElse(空);//输出{"age":1,"name":"Tom"}//随机取出任意对象Useruser=users.stream().findAny().orElse(null);3.3匹配match//判断是否有用户名为TombooleanexistTom=users.stream().anyMatch(user->"Tom".equals(user.getName()));//判断年龄是否为allusersislessthan5booleancheckAge=users.stream().allMatch(user->user.getAge()<5);3.4filterfilter//过滤名字为Tom的用户users.stream().filter(user->"Tom".equals(user.name)).forEach(System.out::println);//Output{"age":1,"name":"Tom"}3.5Mapmap/flatMap//打印users中的名字users.stream().map(User::getName).forEach(System.out::打印);//输出TomJerry//List>到ListList>userList=newArrayList<>();Listusers=userList.stream().flatMap(Collection::stream).collect(Collectors.toList());3.6Reducereduce//求用户年龄总和Integersum=users.stream().map(User::getAge).reduce(Integer::sum).orElse(0);//求用户年龄的乘积Integerproduct=users.stream().map(User::getAge).reduce((x,y)->x*y).orElse(0);3.7Sortsorted//按年龄倒序排列Listcollect=users.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());3.8Collectcollect//list转换成mapMapmap=users.stream().collect(Collectors.toMap(User::getAge,Function.identity()));//按年龄段Map>userMap=users.stream().collect(Collectors.groupingBy(User::getAge));//求平均年龄DoubleageAvg=users.stream().collect(Collectors.averagingInt(User::getAge));//输出1.5//求年龄总和IntegerageSum=users.stream().collect(Collectors.summingInt(User::getAge));//求最老的用户Useruser=users.stream().collect(Collectors.maxBy(Comparator.comparing(User::getAge))).orElse(null);//将用户名连接成逗号分隔的字符串输出Stringnames=users.stream().map(User::getName).collect(收集器.joining(","));//输出汤姆,杰瑞