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-流的更多相关文章

  1. java - day013 - 流, FileInputStream, BufferedInputStream,

    流 Stream 把数据的读写,抽象成数据在管道中流动. 流是单向的 输入流, 只能用来读取数据 输出流, 只能用来输出数据 流只能顺序读写数据 流只能一次性从头到尾读写数据 流动过的数据,不能反复流 ...

  2. 使用C#处理基于比特流的数据

    使用C#处理基于比特流的数据 0x00 起因 最近需要处理一些基于比特流的数据,计算机处理数据一般都是以byte(8bit)为单位的,使用BinaryReader读取的数据也是如此,即使读取bool型 ...

  3. HTML 事件(三) 事件流与事件委托

    本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...

  4. FILE文件流的中fopen、fread、fseek、fclose的使用

    FILE文件流用于对文件的快速操作,主要的操作函数有fopen.fseek.fread.fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满 ...

  5. java.IO输入输出流:过滤流:buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...

  6. java 字节流与字符流的区别

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...

  7. BZOJ 3504: [Cqoi2014]危桥 [最大流]

    3504: [Cqoi2014]危桥 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1407  Solved: 703[Submit][Status] ...

  8. java I/O流

    输入流(读取数据的流) BufferedInputStream---继承--->FileInputStream--继承--->InputStream------> (1)字节流操作中 ...

  9. Ford-Fulkerson 最大流算法

    流网络(Flow Networks)指的是一个有向图 G = (V, E),其中每条边 (u, v) ∈ E 均有一非负容量 c(u, v) ≥ 0.如果 (u, v) ∉ E 则可以规定 c(u, ...

  10. .NET基础拾遗(3)字符串、集合和流

    Index: (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基础 ...

随机推荐

  1. centeros下安装python3

    一.查看python版本及安装python3 1. which python 可以看到预装的是2.7版本 2.安装依赖包 yum -y groupinstall "Development t ...

  2. PostgreSQL精简命令:

    dos命令行连接PostgreSQL: . 接入PostgreSQL数据库: psql -h IP地址 -p 端口 -U 用户名 -d 数据库名 . 输入数据库密码 C:\Users\admin\De ...

  3. mongodb 增查改删

    我们在  MongoDB 之 你得知道MongoDB是个什么鬼 MongoDB - 1  中学习了如果安装部署一个 MongoDB 如果没看到我的金玉良言的话,就重新打开一次客户端和服务端吧 本章我们 ...

  4. PHP房贷计算器代码,等额本息,等额本金

    debx(); function debx() { $dkm = 240; //贷款月数,20年就是240个月 $dkTotal = 10000; //贷款总额 $dknl = 0.0515; //贷 ...

  5. mysql PXC集群方案总结

    同时写集群内的所有机器 写性能依赖最慢的那个机器 读性能提高X倍

  6. input type=checkbox的值后台怎么接受

    input type=checkbox的值是on或off 实体类中这样写即可 public void setChapterVisibility(Object chapterVisibility) { ...

  7. How to download Heavy Duty Diagnostic Caterpillar SIS 2018 software

    Maybe you find there are supplied Caterpillar SIS 2018 software free download in search engine, that ...

  8. webstorm预览时把浏览器地址localhost改成IP

    可以通过 File --> Setting,搜索 deployment 点击 + 号 然后输入一个名称,选择:Local or mounted folder,点击 OK 接下来选择你的本地项目路 ...

  9. 【Unity】工具类系列教程—— 代码自动化生成!

    转载自:https://zhuanlan.zhihu.com/p/30716595?utm_medium=social&utm_source=qq [为什么要做自动化工具] 工具类的创建是为了 ...

  10. unity读取json文件

    首先填表 [escel转json]注意,粘贴表之后,需要把最后的空行删掉 http://www.bejson.com/json/col2json/ [json格式化] http://www.bejso ...