流相关的接口和类在java.util.stream包中。

AutoCloseable接口来自java.lang包。

所有流接口从继承自AutoCloseable接口的BaseStream接口继承。

AutoCloseable

|

+--BaseStream

|

+--IntStream

|

+--LongStream

|

+--DoubleStream

|

+--Stream

如果流使用集合作为其数据源,并且集合不需要关闭。

如果流基于可关闭的数据源(例如文件I/O通道),那么我们可以使用try-with-resources语句创建流,以使其自动关闭。

BaseStream

BaseStream接口定义所有类型的流的所有方法。

  • Iterator iterator()
  • 终端操作
  • 返回流的迭代器。
  • sequential()
  • 中间操作
  • 返回顺序流。 如果流已经是顺序的,则它返回自身。 它将并行流转换为顺序流。
  • parallel()
  • 中间操作
  • 返回并行流。 如果流已经是并行的,则它返回自身。 它将并行流转换为顺序流。
  • boolean isParallel()
  • 如果流是并行,则返回true,否则返回false。
  • 在调用终端流操作方法后调用此方法可能会产生不可预测的结果。
  • unordered()
  • 中间操作
  • 返回流的无序版本。 如果流已经是无序的,则它返回自身。

Stream 接口表示元素类型T的流。

流 表示学生对象流。

Stream 接口包含诸如filter(),map(),reduce(),collect(),max(),min()等。

当使用原始类型时,我们可以使用三个专门的流接口,称为IntStream,LongStream和DoubleStream。

这些接口提供了处理原始值的方法。

对于其他基本类型,例如float,short,byte,我们仍然可以使用三个专用流接口。

在下面的代码中,我们将使用stream来计算列表中所有奇整数的平方和。

我们将使用以下步骤进行计算。

创建流

Collection接口中的stream()方法返回一个顺序流。 这样,集合充当数据源。

下面的代码创建一个List 并从列表中获取一个Stream

List numbersList = Arrays.asList(1, 2, 3, 4, 5);Stream numbersStream = numbersList.stream();

过滤流

如果指定的谓词对于该元素返回真,Stream filter()使用Predicate来保留元素。

以下语句获取仅奇数整数的流:

Stream< Integer> oddNumbersStream = numbersStream.filter(n - > n%2 == 1);

映射流

Stream< T> map()使用一个Function来映射每个元素在流中创建新流。

以下语句将流映射到其正方形:

Stream aStream = stream.map(n -> n * n);

Reduce流

reduce(T identity,BinaryOperator累加器)将流减少到单个值。

它采用一个初始值和一个 BinaryOperator 作为参数的累加器。

reduce(T identity,BinaryOperator< T>累加器)使用所提供的初始值和关联累积函数对该流的元素执行减少,并返回减小的值。

这相当于:

T result = identity;for (T element : this stream) result = accumulator.apply(result, element)return result;

以下代码将流中的所有整数相加。

int sum = aStream.reduce(0, (n1, n2) -> n1 + n2);

Integer.sum()方法执行两个整数的和。

我们可以使用方法引用重写代码。

int sum = aStream.reduce(0, Integer::sum);

Together

以下代码将每个步骤链接在一起。

import java.util.Arrays;import java.util.List;public class Main { public static void main(String[] args) { List numbers = Arrays.asList(1, 2, 3, 4, 5); int sum = numbers.stream() .filter(n -> n % 2 == 1) .map(n -> n * n) .reduce(0, Integer::sum); System.out.println(sum); }}

上面的代码生成以下结果。

有序流与无序流

流可以是有序的或无序的。

有序流保持其元素的顺序。

Streams API可以将有序流(其可以表示有序数据源,例如列表或有序集)转换成无序流。

我们还可以通过应用排序中间操作将无序流转换为有序流。

import java.util.Arrays;import java.util.List;public class Main { public static void main(String[] args) { List numbers = Arrays.asList(3,7,9,3,1,2,1, 2, 3, 4, 5); numbers.stream() .filter(n -> n % 2 == 1) .sorted() .forEach(System.out::println); }}

qmediaplayer获取流类型_Java 流API相关推荐

  1. java流实例_java流汇总以及使用实例

    流 一.基本概念 Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络) 读入到内存中,形成了流,然后将这些流还可以写到另外的目的 ...

  2. java 流计算_JAVA流式计算

    JAVA流式计算 流的简单介绍 Java 8 中,引入了流(Stream)的概念,利用提供的Stream API,我们可以方便的操作集合数据,这种方式很类似于使用SQL对数据库的操作. 如何生成流 利 ...

  3. java流读写_java流概述以及文件读写示例

    1. 先分清楚是字节流还是字符流. 字节流:InputStream OutputStream 字符流:Reader Writer 字符流与字节流的区别是读取的单位长度不同,字节流读8字节,字符流读16 ...

  4. java 流计算_Java 流收集器 ( Stream Collectors ) ( 一 ) - 统计计算

    首先需要声明的是,我的开发语言是 PHP,但我对所有语言都懂一点点,然后很多文章,都是看到某个知识点就想写些什么 刚刚再浏览某些文章的时候看到 Java 的流收集器 ( Stream Collecto ...

  5. java反射 获取参数类型_Java反射带参构造创建对象时如何自动转换参数类型

    需求是这样的:有一个类,类的路径知道,例如是com.xx.xx.xx其中有不同类型的成员变量(个数未知),有对应的setter和getter方法,有一个无参构造和一个全参构造.现在需要用反射机制... ...

  6. java获取电脑麦克风_Java的API的声音 - 捕捉麦克风(Java Sound API - capturing microphone)...

    问 题 我一直在阅读了关于声音api for java的几天,我无法理解它.我体面的程序员,我只是有困难得到我的头周围的api. 我一直在试图从我的麦克风捕获音频和实时显示波图. 我无法捕获音频,他们 ...

  7. curl mimetype类型_根据二进制流及文件头获取文件类型mime-type

    图片格式查看: 用十六进制编辑器察看过图片的文件头,分析的结果,供大家参考: 1.JPEG/JPG - 文件头标识 (2 bytes): $ff, $d8 (SOI) (JPEG 文件标识) - 文件 ...

  8. java 怎么把list流化_Java 中的数据流和函数式编程

    原标题:Java 中的数据流和函数式编程 学习如何使用 Java 8 中的流 API 和函数式编程结构.-- Marty Kalin(作者) 当 Java SE 8(又名核心 Java 8)在 201 ...

  9. ts获取服务器数据_ts 流服务器

    流媒体技术学习笔记之(十)HLS协议直播延时优化(35s到10S) 1.首先要了解HLS延时的机制,也就是为什么会延时,延时主要发生在什么地方. HTTP Live Streaming 并不是一个真正 ...

最新文章

  1. 转载--tomcat整合apr
  2. ReaderMe 1.0.0.32版发布
  3. 2021吉林高考26日几点可以查询成绩,2021吉林高考成绩查分时间及入口
  4. java语言执行模式,使用java.exe执行静默模式
  5. linux添加Mib库,Linux SNMP中的管理信息库(MIB)学习
  6. C#/.NET整数的三种强制类型转换(int)、Convert.ToInt32()、int.Parse()的区别
  7. #1062 – Duplicate entry ‘1’ for key ‘PRIMARY’
  8. 阿里云云计算 49 云监控的概念
  9. php fckeditor,FCKeditor的PHP配备
  10. C++入门教程(23)深度优先,广度优先(连连看判断是否可以消除)
  11. 作为音乐创作人,你可知道?有可以自己写歌词的软件,专门写歌词的软件,创作歌词的软件,帮忙写歌词的软件
  12. 升级IOS15.4出现更新验证失败如何解决
  13. SH-SSS丨《ISSD: 基于迭代式语音分离的说话人日志系统》论文线上分享
  14. win10 java模拟鼠标_[pc玩家]如何在Windows10中用键盘控制鼠标光标
  15. 《炬丰科技-半导体工艺》 硅光电子器件上的单片砷化铟量子点
  16. 计算机应用大赛宣传稿,江苏开放大学计算机应用基础中国名城宣传片
  17. Tommy Hilfiger 宣布,F1世界冠军Lewis Hamilton担任TOMMY HILFIGER全球男装代言人
  18. Redis——狂聊教程笔记
  19. redis集群报错:(error) MOVED 11469 192.168.163.249:7002
  20. Nancy和ASP.NET MVC的简单对比

热门文章

  1. yii2 session mysql_Yii框架 session 数据库存储操作方法示例
  2. oracle 修索引改空间_Oracle如何更改表空间的数据文件位置详解
  3. 安卓模拟器_exagear模拟器安卓模拟器
  4. Android 第十八课 强大的滚动控件 RecyclerView
  5. python 投资组合_成功投资组合的提示
  6. 全球 化 化_全球化设计
  7. 魔兽怀旧网站模块下载_一个人的网站重新设计和怀旧
  8. 写给初中级前端的高级进阶指南等
  9. 【我的Android进阶之旅】Android自定义Lint实践
  10. Mac 的mysql5.7没有配置文件,如何解决only_full_group_by 问题