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. bzoj3098 Hash Killer II 生日共计

    题目传送门 题目大意: 让你构造一个字符串,使字符串在题目给出的哈希条件下统计出错. 思路:生日攻击,结论题,尚未理解. #include<bits/stdc++.h> #define C ...

  2. Codeforces 1136D Nastya Is Buying Lunch (贪心)

    题意: 给一个序列和一组交换序列(a,b),当且仅当a在b的前面(不允许有间隔),这两个数才能交换,问最后一个数最多能移动多少个位置. 分析: 这题是思路是十分的巧妙呀 , 用一个数组num[x]  ...

  3. HDU 6336 (规律 + 二维矩阵的前缀和妙用)

    题目 给出长度为n 的A矩阵 , 按 int cursor = 0; for (int i = 0; ; ++i) { for (int j = 0; j <= i; ++j) { M[j][i ...

  4. C# 获取控制面板软件信息

    一般情况下要知道的注册表位置 Software\Microsoft\Windows\CurrentVersion\Uninstall 要知道的根目录集合 List<RegistryKey> ...

  5. POJ - 3261 后缀数组 height应用

    题意:求最少重叠\(k\)次的重复子串的最大长度 子串长度问题依然是二分枚举,可以观察出重叠的一定是sa排序中连续的 之前想出一种判断要\(n^2\)的方法,没有考虑到后面肯定会连续出现的情况 (大概 ...

  6. spring4.x hibernate4.x 整合 ehcache 注解 annotate

    [From] http://my.oschina.net/alexgaoyh/blog/348188

  7. js面向切面编程

    Function.prototype.before=function(func){ var _self=this; return function(){  if(func.apply(this,arg ...

  8. git安装以及webstorm配置git

    下载及安装请移步   https://www.cnblogs.com/specter45/p/github.html 用webstorm上传代码时,首先要先下载git,网址一搜就可以搜到,然后开始配置 ...

  9. Beam编程系列之Apache Beam WordCount Examples(MinimalWordCount example、WordCount example、Debugging WordCount example、WindowedWordCount example)(官网的推荐步骤)

    不多说,直接上干货! https://beam.apache.org/get-started/wordcount-example/ 来自官网的: The WordCount examples demo ...

  10. maven pom.xml指定jdk

    <plugins> <!-- 指定jdk --> <plugin> <groupId>org.apache.maven.plugins</grou ...