本篇文章为你整理了java 新特性之 Stream API(java stream.of)的详细内容,包含有java streaming java stream.of java stream 用法 java stream split java 新特性之 Stream API,希望能帮助你了解 java 新特性之 Stream API。
Stream到底是什么呢?
是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。
“集合讲的是数据,Stream讲的是计算!”
注意:
Stream 自己不会存储元素。
Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。
Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。
终止操作(终端操作)
一旦执行终止操作,就执行中间操作链,并产生结果。之后,不会再被使用
二、Stream API 的创建
创建 Stream方式一:通过集合
Java8 中的 Collection 接口被扩展,提供了两个获取流的方法:
default Stream E stream() : 返回一个顺序流
default Stream E parallelStream() : 返回一个并行流
public class testStream {
@Test
public void test() {
List String list = new ArrayList();
list.add("张三");
list.add("李四");
Stream String stream = list.stream(); //获取串行流
Stream String stream1 = list.parallelStream(); //获取并行流
//终止操作,打印流。
stream.forEach(System.out::println);
stream.forEach(Sustem.out::println);
创建 Stream方式二:通过数组
Java8 中的 Arrays 的静态方法 stream() 可以获取数组流:
int[] emps = new int[]{1, 2, 3, 4, 5, 6}; //创建数组
IntStream stream = Arrays.stream(emps);
//终止操作,打印流。
stream.forEach(System.out::println);
创建 Stream方式三:通过Stream的of()
可以调用Stream类静态方法 of()方法, 通过显示值创建一个流。它可以接收任意数量的参数。
创建 Stream方式四:创建无限流
可以使用静态方法 Stream.iterate() 和 Stream.generate(), 创建无限流。
二、Stream API 的中间操作
多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何的处理!而在终止操作时一次性全部处理,称为“惰性求值”。
筛选与切片
skip(long n)
跳过元素,返回一个扔掉了前 n 个元素的流。若流中元素不足 n 个,则返回一个空流。与 limit(n) 互补
map(Function f)
接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。
mapToDouble(ToDoubleFunction f)
接收一个函数作为参数,该函数会被应用到每个元素上,产生一个新的 DoubleStream。
mapToInt(ToIntFunction f)
接收一个函数作为参数,该函数会被应用到每个元素上,产生一个新的 IntStream。
mapToLong(ToLongFunction f)
接收一个函数作为参数,该函数会被应用到每个元素上,产生一个新的 LongStream
flatMap(Function f)
接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流
终端操作会从流的流水线生成结果。其结果可以是任何不是流的值,例如:List、Integer,甚至是 void 。
流进行了终止操作后,不能再次使用。
forEach(Consumer c)
内部迭代(使用 Collection 接口需要用户去做迭代,称为外部迭代。相反,Stream API 使用内部迭代————它帮你把迭代做了)
备注: map 和 reduce 的连接通常称为 map-reduce 模式,因 Google
用它来进行网络搜索而出名。
collect(Collector c)
将流转换为其他形式。接收一个 Collector 接口的实现,用于给Stream中元素做汇总的方法
Collector 接口中方法的实现决定了如何对流执行收集的操作(如收集到 List、Set、Map)。
另外, Collectors 实用类提供了很多静态方法,可以方便地创建常见收集器实例,具体方法与实例如下表:
把流中元素收集到创建的集合
Collection emps =list.stream().collect(Collectors.toCollection(ArrayList::new));
计算流中元素Integer属性的平均值
double avg = list.stream().collect(Collectors.averagingInt(Employee::getSalary));
收集流中Integer属性的统计值。如:平均值
int SummaryStatisticsiss= list.stream().collect(Collectors.summarizingInt(Employee::getSalary));
连接流中每个字符串
String str= list.stream().map(Employee::getName).collect(Collectors.joining());
根据比较器选择最大值
Optionalmax= list.stream().collect(Collectors.maxBy(comparingInt(Employee::getSalary)));
根据比较器选择最小值
Optional min = list.stream().collect(Collectors.minBy(comparingInt(Employee::getSalary)));
归约产生的类型
从一个作为累加器的初始值开始,利用BinaryOperator与流中元素逐个结合,从而归约成单个值
int total=list.stream().collect(Collectors.reducing(0, Employee::getSalar,Integer::sum));
包裹另一个收集器,对其结果转换函数
int how= list.stream().collect(Collectors.collectingAndThen(Collectors.toList(), List::size));
根据某属性值对流分组,属性为K,结果为V
Map Emp.Status, List map=list.stream().collect(Collectors.groupingBy(Employee::getStatus));
根据true或false进行分区
Map Boolean,List vd = list.stream().collect(Collectors.partitioningBy(Employee::getManage));
以上就是java 新特性之 Stream API(java stream.of)的详细内容,想要了解更多 java 新特性之 Stream API的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。