Java 8 Stream

📅 2026/7/28 14:50:21
Java 8 Stream
前言Stream是Java8的另一大亮点是对容器对象功能的增强它专注于对容器对象进行各种非常便利、高效的 聚合操作aggregate operation或者大批量数据操作准备流和管道的概念Stream 以一种流式风格来处理数据这种风格将要处理的元素集合看作一种流 流在管道中传输 并且可以在管道的节点上进行处理 比如筛选 排序聚合等。类似的有Linux的管道 “|”例如ps -ef | grep 9400后者的操作依赖与前者的结果Lambda表达式Stream API的设计基于函数式编程和lambda表达式想要更全面的了解stream必须掌握Lambda表达式的基础概念及用法Stream能带来什么在未出现Stream API之前我们在Java当中对数据的数据方式是十分匮乏的无非for-each遍历或者iterate迭代遍历Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 中数据的处理。同时Stream API与Lambda表达式结合让写出的代码更加高效、干净、简洁。Stream和集合集合关注的是数据的存储stream关注的是数据的处理stream不是取代集合而是对Java数据集的补充解决集合难以做到的事情Stream(流)的创建1、创建一个空流StreamObjectemptyStream.empty();2、list转换成流ListStringstringsArrays.asList(1,2);StreamStringstreamstrings.stream();Java 8 之后Collection接口新增了stream()的默认方法提供集合转化为流的支持3、数组转换为流Stream.of()方法接收多个参数生成Stream对象StreamStringaStream.of(a,b,c);4、builderStreamStringbuilderStream.Stringbuilder().add(a).add(b).build();5、generatepublicvoidcreateStreamByGenerator(){StreamIntegergenerateStream.generate(newRandom()::nextInt).limit(10);}generate会根据传入的Supplier生成无穷序列可用limitint限制生成的数量常用于生成随机数6、iteratepublicvoidcreateStreamByIterate(){StreamIntegerlimitStream.iterate(10,n-n2).limit(10);limit.forEach((element)-System.out.println(element));}iterate同样会生成无限序列根据传入的seed和UnaryOperator和UnaryOperator将会执行f(seed),f(f(seed)),f(f(f(seed)))…7、create file streampublicvoidcreateFileStream()throwsIOException{Path pathPaths.get(content.txt);StreamStringlinesFiles.lines(path);}Stream(流)的操作