流式编程爱 撸码就是快,流式编程好 代码传家宝
Stream API 概念:
Stream 流处理,首先要澄清的是 java8 中的 Stream 与 I/O 流 InputStream 和 OutputStream 是完全不同的概念。
Stream 机制是针对集合迭代器的增强。流允许你用声明式的方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。
1.流的基本流程
1.准备一个数据源(可以是集合,数组,I/O channel, 产生器generator 等)
2.一个中间操作链,形成一条流的流水线
3.一个终端操作,执行流水线,并生成结果
2.流的操作特性:
1.stream不存储数据
2.stream不改变源数据
3.stream不可重复使用
为了体现流的特性,我准备了一组对应的测试用例:
//1.流的生成 与不可重复使用
@Test
public void test1(){
// 中间节点--> 懒节点
// 区分
appleStore.stream()
.peek(a-> System.out.println(a.getColor()))//执行一个函数(中间节点)
.peek(a-> System.out.println(a.getWeight()))
.toArray();//终值节点
//一条流走到底 不能分叉
Stream<Apple> stream1 = appleStore.stream();
Stream<Apple> stream2 = stream1.peek(a -> System.out.println("123"));
//Stream<Apple> stream3 = stream1.peek(a -> System.out.println("123"));
}
@Test
public void test2(){
// 上个节点影响下个节点
/*
* 影响方式:
* 1.过滤
* 2.转换
* 3.去重*/
appleStore.stream()
.filter(a-> a.getColor().equals("green"))
//.map(a->a.getColor())
//.distinct()
.peek(a-> System.out.println(a.getColor()+":"+a.getWeight()