day013-流
1、 常用函数式接口
1.1 Predicate接口
有时候我们需要对某种的数据进行判断,从而得到一个boolean值结果。这时可以使用java.util.function.Predicate<T>接口。
1.1.1 常见方法
抽象方法:test() 用于条件判断的场景
默认方法:and() 将两个Predicate条件使用“与”逻辑连起来实现“并且”的效果
默认方法:or() 将两个Predicate条件使用“或”逻辑连起来实现“或”的效果
默认方法:negate() 实现取反的效果
1.2 Function接口
Java.util.function.Function<T, R>接口用来根据一个类型的数据得到另一个类型的数据,前者称为前置条件,后者称为后置条件。有进有出,所以称为“函数Function”。
1.2.1 常见方法
抽象方法: R apply(T t) 根据类型T的参数获取类型R的结果。
默认方法: <V> Function<T,V> andThen(Function<? super R,? extends V> after)
有前后执行的关系。先执行的结果,作为后执行的参数
1.2.2延迟方法和终结方法
延迟方法:只是在拼接Lambda函数模型的方法,并不立即执行得到结果。
终结方法:根据拼接好的Lambda函数模型,立即执行得到结果值的方法。
下面的表格进行了方法分类的整理:
接口名称 |
方法名称 |
抽象/默认 |
延迟/终结 |
Supplier |
get |
抽象 |
终结 |
Consumer |
accept |
抽象 |
终结 |
andThen |
默认 |
延迟 |
|
Predicate |
test |
抽象 |
终结 |
and |
默认 |
延迟 |
|
or |
默认 |
延迟 |
|
negate |
默认 |
延迟 |
|
Function |
apply |
抽象 |
终结 |
andThen |
默认 |
延迟 |
2.Stream流
在Java8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。
注意:请暂时忘记对传统IO流的固有印象。
整体来看,流式思想类似于工厂车间的“生产流水线”。
这张图中展示了过滤、映射、跳过、计数等多部操作,这是一种集合元素的处理方案,而方案就是一种“函数模型”。图中的每一个方框都是一个“流”,调用指定的方案,可以从一个流模型转化为另一个流模型。
备注:“Stream流”其实是一个集合元素的函数模型,它并不是集合,也不是数据结构,其本身并不存储任何元素(或其地址值)。
2.1 创建流
单列流可以直接调用stream()方法获取
数组可以用Stream.of() 方法获取
2.2 常用方法
(a) filter:过滤
Stream<T> filter(Predicate<? super T> predicate);
该接口接受一个Predicate函数式接口参数(可以是一个Lambda或方法引用)作为筛选条件。
(b) boolean test(T t);
(c) count:计数,返回流中元素的个数
(d) limit:获取前几个
(e) skip:跳过前几个
(f) map:映射
(e) concat:拼接。一般相同类型的流,才进行拼接。
2.3 非终结方法与终结方法
凡是返回值仍然为Stream接口的非终结方法(函数拼接方法),它们支持链式调用。而返回值不再为Stream接口的为终结方法,不再支持链式调用。
方法名 |
方法作用 |
方法种类 |
是否支持链式调用 |
count |
统计个数 |
终结 |
否 |
forEach |
逐一处理 |
终结 |
否 |
filter |
过滤 |
函数拼接 |
是 |
limit |
取用前几个 |
函数拼接 |
是 |
skip |
跳过前几个 |
函数拼接 |
是 |
map |
映射 |
函数拼接 |
是 |
concat |
组合 |
函数拼接 |
是 |
2.4收集Stream结果
2.4.1收集到集合中
Stream.collect(Collectors.toList()) //收集流中元素到List集合中
Stream.collect(Collectors.toSet()) //收集流中元素到Set集合中
Stream.toArray(String[]::new) //收集流中元素到数组中
2.5 并发流
串行流:在一个线程中从上往下执行
并行流:可以同时在多个线程中执行。可以使用多线程,执行并发操作。
2.5.1并发流的获取方式
方式1:将串行流转化为并发流 .调用串行流的parallel()方法
方式2: 直接获得并发流 调用集合对象的parallelStream()的方法
day013-流的更多相关文章
- java - day013 - 流, FileInputStream, BufferedInputStream,
流 Stream 把数据的读写,抽象成数据在管道中流动. 流是单向的 输入流, 只能用来读取数据 输出流, 只能用来输出数据 流只能顺序读写数据 流只能一次性从头到尾读写数据 流动过的数据,不能反复流 ...
- 使用C#处理基于比特流的数据
使用C#处理基于比特流的数据 0x00 起因 最近需要处理一些基于比特流的数据,计算机处理数据一般都是以byte(8bit)为单位的,使用BinaryReader读取的数据也是如此,即使读取bool型 ...
- HTML 事件(三) 事件流与事件委托
本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...
- FILE文件流的中fopen、fread、fseek、fclose的使用
FILE文件流用于对文件的快速操作,主要的操作函数有fopen.fseek.fread.fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满 ...
- java.IO输入输出流:过滤流:buffer流和data流
java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...
- java 字节流与字符流的区别
字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...
- BZOJ 3504: [Cqoi2014]危桥 [最大流]
3504: [Cqoi2014]危桥 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1407 Solved: 703[Submit][Status] ...
- java I/O流
输入流(读取数据的流) BufferedInputStream---继承--->FileInputStream--继承--->InputStream------> (1)字节流操作中 ...
- Ford-Fulkerson 最大流算法
流网络(Flow Networks)指的是一个有向图 G = (V, E),其中每条边 (u, v) ∈ E 均有一非负容量 c(u, v) ≥ 0.如果 (u, v) ∉ E 则可以规定 c(u, ...
- .NET基础拾遗(3)字符串、集合和流
Index: (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基础 ...
随机推荐
- QDU_AP协会18级ST1
A - A + B Problem II I have a very simple problem for you. Given two integers A and B, your job is t ...
- 关于strcmp函数的用法
strcmp函数是在string.h库下的han函数, 具体用法如下: strcmp函数是用来比较2个字符串的函数,如srcmp(字如果符串1,字符串2),从第一个字符开始比较,如果到最后两个字符串完 ...
- web 页面 验证码 实现
1. 前台页面代码: 页面刷新时会自动请求 ${pageContext.request.contextPath}/yanzheng?yz=&time=-1111 这个action <f ...
- win10 安装MySQL8.0.11记录。
参考了博客A:https://blog.csdn.net/m0_37788308/article/details/79965378 博客B:https://blog.csdn.net/fxbin123 ...
- Python入门书的读书笔记
入门书地址 三引号 (""" 或 ''') 来指定多行字符串字符串是不可变的输出小数点后三位 print('{0:.3f}'.format(1 / 3))输出字符串长度为 ...
- oracle 备份恢复篇(五)---rman 剩下控制文件和spfile
一,环境准备 ❤ 拥有全量备份文件
- jdk监控tomcat
一, tomcat配置文件 在tomcat的配置文件中添加被监控的项 #在tomcat配置文件中开启监控功能 vim /application/tomcat/bin/catalina.sh +97 C ...
- 求入栈顺序为1234……N的序列的所有可能的出栈序列
class Program { private static void Fun(int x, int n, Stack<int> stack, List<int> outLis ...
- centos7 中文乱码问题解决方法
1.查看是否安装中文包 可以使用下面的命名查看系统是否安装了中文安装包. locale -a |grep "zh_CN" 没有输出,说明没有安装,输入下面的命令安装: yum gr ...
- 1.2 js基础
1.onchange 99%用到select上边. 2.js是干什么的,修改css样式和属性 3.选项卡步骤 1.获取元素 2.循环给按钮加自定义属性 3.循环给按钮加事件 4.封装 ...