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与数据库开发基础 ...
随机推荐
- cmder 常用快捷键
双Tab,用于补全 Ctrl+T,建立新页 Ctrl+W,关闭标签页 Ctrl+Tab,切换标签页 Alt+F4,关闭所有标签页 Ctrl+1,切换到第一个页签,Ctrl+2同理 Alt + ente ...
- 【算法笔记】B1015 德才论
1015 德才论 (25 分) 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君 ...
- Web下TreeView同一节点连续点击,只执行一次SelectedNodeChanged的解决
Web下TreeView同一节点连续点击,只执行一次SelectedNodeChanged的解决 http://blog.csdn.net/net_boy/archive/2009/11/05/477 ...
- SPOJ - COT2 离线路径统计
题意:求\(u\)到\(v\)的最短路径的不同权值种类个数 树上莫队试水题,这一篇是上篇的弱化部分,但可测试以下结论的正确性 设\(S(u,v)\):\(u-v\)最短路径所覆盖的点集 \(S(u,v ...
- TransactionScope小例
1 public static class DataTableHelper { public static List<T> ToModel<T>(this DataTable ...
- PostgreSQL精简命令:
dos命令行连接PostgreSQL: . 接入PostgreSQL数据库: psql -h IP地址 -p 端口 -U 用户名 -d 数据库名 . 输入数据库密码 C:\Users\admin\De ...
- 第五次 Scrum Meeting
第五次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/4/9 22:00 30min 大运村1号楼6F 附Github仓库:WEDO 例会照片 工作情况总结(4.9) ...
- Maven---pom.xml 详解(转)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- PHP 编译安装 gd 库
作者博文地址:https://www.cnblogs.com/liu-shuai/ 安装gd依赖库 freetype wget http://download.savannah.gnu.org/rel ...
- (Frontend Newbie)JavaScript基础之函数
函数可以说是任何一门编程语言的核心概念.要能熟练掌握JavaScript,对于函数及其相关概念的学习是非常重要的一步.本篇从函数的基本知识.执行环境与作用域.闭包.this关键字等方面简单介绍Java ...