网站建设补充合同范本,河南高端建设网站,seo观察网,1_ 掌握网站开发的基本流程 要求:熟悉网站开发与设计的基本流程.TOC
第一章#xff1a;Stream流是什么
1.1#xff09;简单介绍
学习Stream流就绕不开Lambda表达式#xff0c;
需要了解Lambda表达式可以看一下这篇–#xff1a;Lambda表达式学习
1.其实“流”是个抽象概念#xff0c;我们把现实世界中与Stream流有相同特性的…TOC
第一章Stream流是什么
1.1简单介绍
学习Stream流就绕不开Lambda表达式
需要了解Lambda表达式可以看一下这篇–Lambda表达式学习
1.其实“流”是个抽象概念我们把现实世界中与Stream流有相同特性的东西也称为“流”比如水流流水线。流的思想就像工厂中的“生产流水线”将集合或数组中的元素当做流水线上的产品进行操作。
2.既然是操作计算数据那么这些数据的源头是什么可以是数组、文件、集合、函数。注意Stream流不保存数据不是容器。更贴切的比喻是流水线产品只是经过流水线而不保存在流水线上。
1.2创建流的五种方式
①直接用方法创建
Stream s Stream.of(1,2,3,4,5,6,7);②根据集合创建
//创建集合
ArrayListString list new ArrayList();
//添加元素
Collections.addAll(list,张三,李四,张五极,张六六,张七八九);//流对象创建
StreamString lisStream list.Stream();③根据数组要注意数组存储的数据类型这里生成的流是数值流。mapToInt、mapToDouble、mapToLong可以将对象流转换成对应的数值流而boxed方法可以把数值流转换为对象流。
int[] intArr {1,2,3,4,56};// 因为是int数组 所以变成了IntStream
IntStream arrayStream Arrays.stream(intArr);④根据文件通过Files.line方法得到的每个流是给定文件中的一行
//这个是我百度的
try {StreamString fileStream Files.lines(Paths.get(data.txt), Charset.defaultCharset());} catch (IOException e) {e.printStackTrace();}⑤函数创建
第一种函数iterate
方法接受两个参数第一个为初始化值第二个为进行的函数操作因为iterator生成的流为无限流通过limit方法对流进行了截断只生成5个偶数
第二种函数generate
generate方法接受一个参数方法参数类型为Supplier 由它为流提供值。generate生成的流也是无限流因此通过limit对流进行了截断
//第一种iterate
StreamInteger iterateStream Stream.iterate(0, n - n 2).limit(5);//第二种generate
StreamDouble generateStream Stream.generate(() - Math.random()).limit(5);第二章、Stream流的应用
Java8中提供了方便的一些流操作(比如过滤、排序之类的)从应用中体会Stream流从案例中了解它的特点和应用场景
2.1Stream流中的函数式接口Predicate
1.使用Stream流操作集合中的数据创建集合后创建流对象
//创建集合
ArrayListString list new ArrayList();
//添加元素
Collections.addAll(list,张三,李四,张五极,张六六,张七八九);//流对象创建
StreamString lisStream list.Stream();2.使用filter方法参数是函数式接口Predicate所以可以使用Lambda表达式不会的可以看文章开头有提到方法介绍如下
filter(Predicate? super T predicate) 返回由与此给定谓词匹配的此流的元素组成的流StreamT 。
//创建流对象StreamString stream list.stream();
//筛选所有姓张的人并返回满足此条件的元素组成的流StreamString stream1 stream.filter(name - name.startsWith(张));
//筛选姓名长度为3个字符的人并返回满足此条件的元素组成的流StreamString stream2 stream1.filter(name - name.length() 3);
//打印forEach(Consumer? super T action) 方法对此流的每个元素执行操作。stream2.forEach(name - System.out.println(name));运行结果
2.2Stream流中的函数式接口Supplier
1.自定义方法 getDemo() 传入的参数是函数式接口Supplier使用getDemo方法时使用匿名内部类的写法重写get()方法。
//java.util.function.SupplierT:生产型接口代表结果供应商。
//这里看着很绕其实就是说不给参数也会给你一个结果
//抽象方法T get() 获得结果。
public static void main(String[] args) {//匿名内部类重写get()方法getDemo(new SupplierString() {Overridepublic String get() {return hello world;}});// lambdagetDemo(()-{ return HELLO WORLD;});}//自定义方法 getDemo() 传入的参数是函数式接口Supplierpublic static void getDemo(SupplierString supplier){String s supplier.get();System.out.println(s s);}