Java-Stream API

Java8 中有两大最为重要的改变。

第一个是 Lambda 表达式;另外一个则 是 Stream API。 

Stream API (java.util.stream) 把真正的函数式编程风格引入到 Java 中。这 是目前为止对 Java 类库最好的补充,因为 Stream API 可以极大提供 Java 程 序员的生产力,让程序员写出高效率、干净、简洁的代码。 

Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进 行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。 使用 Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。 也可以使用 Stream API 来并行执行操作。简言之,Stream API 提供了一种 高效且易于使用的处理数据的方式。

 

为什么要使用 Stream API 

实际开发中,项目中多数数据源都来自于 Mysql,Oracle 等。但现在数据源可以更多了,有MongDB,Radis等,而这些NoSQL 的数据就需要 Java 层面去处理。 

Stream 和 Collection 集合的区别:Collection 是一种静态的内存数据 结构,而 Stream 是有关计算的。前者是主要面向内存,存储在内存中, 后者主要是面向 CPU,通过 CPU 实现计算。

 

 Stream 的操作三个步骤

1、创建 Stream

2、中间操作,对数据源进行数据处理

3、终止操作:一旦执行终止操作,就执行中间操作,产生结果之后不会再被使用

 1 package www.exer.collection;
 2 
 3 import org.junit.Test;
 4 
 5 import java.util.Arrays;
 6 import java.util.List;
 7 import java.util.stream.IntStream;
 8 import java.util.stream.Stream;
 9 
10 //stream 是对数据的运算,与 CPU 打交道
11 //Stream 不储存元素
12 //Stream 不改变对象
13 public class StreamAPITest {
14 
15     @Test
16     public void test1(){
17         //创建方式一:通过集合
18         List<Employee> employees = EmployeeData.getEmployees();
19 
20         //返回一个顺序流
21         Stream<Employee> stream = employees.stream();
22             //查询年龄小于 5 的员工信息
23         stream.filter(e -> e.getAge() < 5).forEach(System.out::println);
24             //截断流
25         employees.stream().limit(3).forEach(System.out::println);
26         //返回一个并行流
27         final Stream<Employee> employeeStream = employees.parallelStream();
28 
29 
30     }
31 
32     @Test
33     public void test2(){
34         //创建方式二:通过数组
35         int[] arr = new int[]{1,2,3,4};
36         IntStream stream = Arrays.stream(arr);
37 
38     }
39 
40     @Test
41     public void test3(){
42         //创建方式三 :通过 Stream 的 of()
43         Stream<Integer> stream = Stream.of(1,2,4);
44 
45     }
46 
47 
48 }

 

package www.exer.collection;

import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;

//stream是对数据的运算,与CPU打交道
//Stream不储存元素
//Stream不改变对象
public class StreamAPITest {
@Test
public void test1(){
//创建方式一:通过集合
List<Employee> employees = EmployeeData.getEmployees();

//返回一个顺序流
Stream<Employee> stream = employees.stream();
//查询年龄小于5的员工信息
stream.filter(e -> e.getAge() < 5).forEach(System.out::println);
//截断流
employees.stream().limit(3).forEach(System.out::println);
//返回一个并行流
final Stream<Employee> employeeStream = employees.parallelStream();


}
@Test
public void test2(){
//创建方式二:通过数组
int[] arr = new int[]{1,2,3,4};
IntStream stream = Arrays.stream(arr);

}
@Test
public void test3(){
//创建方式三 :通过Streamof()
Stream<Integer> stream = Stream.of(1,2,4);

}
}