Java Stream

Java Stream

Java 8中引入的Stream API是用来处理对象的集合。流是一个支持各种方法的对象序列,可以通过流水线产生所需的结果。

Java流的特点是-

  • 流不是一个数据结构,相反,它从集合、数组或I/O通道获取输入。
  • 流不改变原来的数据结构,它们只是按照流水线的方法来提供结果。
  • 每个中间操作都被懒散地执行,并返回一个流作为结果,因此各种中间操作可以被流水线化。终端操作标志着流的结束并返回结果。

对流的不同操作-

中间操作

  1. map: map方法用来返回一个由给定函数应用于该流元素的结果组成的流。
List number = Arrays.asList(2,3,4,5);  
List square = number.stream().map(x->x*x).collectors.toList()。 
  1. 过滤器 过滤器方法用于根据作为参数传递的谓词选择元素。
List names = Arrays.asList("Reflection", "Collection", "Stream");  
List result = names.stream().filter(s->s.startedWith("S")).collectors.toList()。
  1. sorted: sorted方法用于对流进行排序。
List names = Arrays.asList("Reflection", "Collection", "Stream");  
List result = names.stream().sorted().collectors.toList()。

终端操作

  1. collect: collect方法用来返回对流进行的中间操作的结果。
List number = Arrays.asList(2,3,4,5,3);  
Set square = number.stream().map(x->x*x).collect(Collectors.toSet())。 
  1. forEach: forEach方法用于遍历流中的每个元素。
List number = Arrays.asList(2,3,4,5);  
number.stream().map(x->x*x).forEach(y->System.out.println(y))。
  1. reduce: reduce方法用于将流中的元素减少到一个单一的值。
    reduce方法需要一个二进制操作器作为参数。
List number = Arrays.asList(2,3,4,5);  
int even = number.stream().filter(x->x%2==0).reduce(0,(ans,i)-> ans+i)。 

这里ans变量被赋予0作为初始值,i被添加到它上面。

演示流的使用的程序

//a simple program to demonstrate the use of stream in java
import java.util.*;
import java.util.stream.*;
  
class Demo
{
  public static void main(String args[])
  {
  
    // create a list of integers
    List<Integer> number = Arrays.asList(2,3,4,5);
  
    // demonstration of map method
    List<Integer> square = number.stream().map(x -> x*x).
                           collect(Collectors.toList());
    System.out.println(square);
  
    // create a list of String
    List<String> names =
                Arrays.asList("Reflection","Collection","Stream");
  
    // demonstration of filter method
    List<String> result = names.stream().filter(s->s.startsWith("S")).
                          collect(Collectors.toList());
    System.out.println(result);
  
    // demonstration of sorted method
    List<String> show =
            names.stream().sorted().collect(Collectors.toList());
    System.out.println(show);
  
    // create a list of integers
    List<Integer> numbers = Arrays.asList(2,3,4,5,2);
  
    // collect method returns a set
    Set<Integer> squareSet =
         numbers.stream().map(x->x*x).collect(Collectors.toSet());
    System.out.println(squareSet);
  
    // demonstration of forEach method
    number.stream().map(x->x*x).forEach(y->System.out.println(y));
  
    // demonstration of reduce method
    int even =
       number.stream().filter(x->x%2==0).reduce(0,(ans,i)-> ans+i);
  
    System.out.println(even);
  }
}

输出:

[4, 9, 16, 25]
[Stream]
[Collection, Reflection, Stream]
[16, 4, 9, 25]
4
9
16
25
6

重要观点/意见

  1. 一个流包括源,然后是零个或多个中间方法组合在一起(流水线)和一个终端方法,按照所述方法处理从源获得的对象。
  2. 流被用来按照流水线的方法计算元素,而不改变对象的原始值。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程