总结:Java8之Stream

编程

 

一、介绍

集合讲的是数据,流讲的是计算

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。

Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。

Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

二、基础操作符

  • ->

->是Java 8新增的Lambda表达式中,变量和临时代码块的分隔符,即:(变量) -> {代码块}

  • Java8 :: 用法 (JDK8 双冒号用法)

JDK8中有双冒号的用法,就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下。

代码其实很简单:

以前的代码一般是如此的:

public class AcceptMethod {

public static void printValur(String str){

System.out.println("print value : "+str);

}

public static void main(String[] args) {

List<String> al = Arrays.asList("a","b","c","d");

for (String a: al) {

AcceptMethod.printValur(a);

}

//下面的for each循环和上面的循环是等价的

al.forEach(x->{

AcceptMethod.printValur(x);

});

}

}

使用双冒号:

public class MyTest {

public static void printValur(String str){

System.out.println("print value : "+str);

}

public static void main(String[] args) {

List<String> al = Arrays.asList("a", "b", "c", "d");

al.forEach(AcceptMethod::printValur);

//下面的方法和上面等价的

Consumer<String> methodParam = AcceptMethod::printValur; //方法参数

al.forEach(x -> methodParam.accept(x));//方法执行accept

}

}

 

三、创建Stream

Stream():创建窜行处理流

parallelStream():创建并行处理流

四、Stream的中间操作

五、Stream的终止操作

终止操作会从流的流水线生成结果。其结果可以是任何不是流的值,例如List、Integer 甚至是void。

Collector接口中方法的实现决定了如何对流执行收集操作(如收集到List、Set、Map)。但是Collector实用类提供了很多静态方法可以方便的收集常见实例

、collect方法

可以把Java8的流看做花哨又懒惰的数据集迭代器。他们支持两种类型的操作:中间操作(e.g. filter, map)和终端操作(如count, findFirst, forEach, reduce). 中间操作可以连接起来,将一个流转换为另一个流。这些操作不会消耗流,其目的是建立一个流水线。与此相反,终端操作会消耗类,产生一个最终结果。collect()方法就是一个归约操作,就像reduce一样可以接受各种做法作为参数,将流中的元素累积成一个汇总结果。具体的做法是通过定义新的Collector接口来定义的。

七、map方法

 

八、

 

参考:

Java 8 Stream

Java8新特性:Stream介绍和总结

详解Java8 Collect收集Stream的方法

以上是 总结:Java8之Stream 的全部内容, 来源链接: utcz.com/z/516762.html

回到顶部