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(){
//创建方式三 :通过Stream的of()
Stream<Integer> stream = Stream.of(1,2,4);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!