java 用流创建流_成为Java流大师–第1部分:创建流

java 用流创建流

在许多情况下,声明性代码(例如,具有Streams的功能组合)提供了出色的代码指标。 通过该动手实验文章系列进行编码,并成为Java Streams的主教练,从而成为一名更好的Java程序员。

Streams的整个想法是代表一个数据流经的管道,并且管道的功能将对数据进行操作。 这样,可以表达对元素流的功能风格的操作。 本文是五分之一题,您将直接学习如何成为流大师。 我们从基本的流示例开始,然后进行更复杂的任务,直到您知道如何将标准Java流连接到Cloud中的数据库。

Streams的整个想法是代表一个数据流经的管道,并且管道的功能将对数据进行操作。 这样,可以表达对元素流的功能风格的操作。 本文是五分之一题,您将直接学习如何成为流大师。 我们从基本的流示例开始,然后进行更复杂的任务,直到您知道如何将标准Java流连接到Cloud中的数据库。

一旦完成了所有五篇文章,您将能够大幅度减少代码库,并知道如何在一瞬间为整个应用程序编写纯Java代码。

这是即将发表的文章的摘要:

  • 第1部分: 创建流
  • 第2部分: 中级操作
  • 第三部分:终端操作
  • 第4部分:数据库流
  • 第5部分:使用流创建数据库应用程序

由于我们坚信“边干边学”的概念,因此该系列由GitHub存储库进行了补充,该存储库包含分为5个单元的Stream练习-每个单元对应于文章的主题。 README文件中提供了有关如何使用源代码的说明。

什么是Java流?

Java Stream接口最初是在Java 8中引入的,它与lambda一起成为Java开发的里程碑,因为它极大地促进了声明性(功能性)编程风格。 如果您想了解更多有关声明式编码的优势,请参考本文 。

可以将Java Stream可视化为数据流经的管道(请参见下图)。 管道的功能将通过例如过滤,映射和分类项目来对数据进行操作。 最后,可以执行终端操作以收集首选数据结构(例如
ListArrayMap 。 需要注意的重要一点是,流只能使用一次。

流管道包含三个主要部分; 流源,中间操作(零到很多)和终端操作。

让我们看一个例子,以了解我们将在整个系列中教的内容。 我们鼓励您阅读下面的代码,并尝试弄清楚打印语句将导致的结果,然后再阅读下一段。

List <String> list = Stream.of("Monkey", "Lion", "Giraffe","Lemur").filter(s -> s.startsWith("L")).map(String::toUpperCase).sorted().collect(toList());
System.out.println(list);

由于Stream API具有描述性,并且通常使用起来非常直观,因此无论您之前是否遇到过这些操作,您都可能会对这些操作的含义有很好的了解。 我们从包含四个字符串的List流开始,每个字符串代表非洲动物。 然后,这些操作会过滤出以字母“ L”开头的元素,将其余元素转换为大写字母,然后以自然顺序(在这种情况下表示字母顺序)对其进行排序,最后将它们收集到List 。 因此,产生输出[“LEMUR”, “LION”]

重要的是要理解,流是“惰性的”,即终端操作是“请求”元素的(在这种情况下,
.collect()语句)。 如果终端操作仅需要一个元素(例如,终端操作.findFirst() ),则最多.findFirst()有一个元素到达终端操作,并且提醒元素(如果有的话)将永远不会产生。资源。 这也意味着仅创建流通常是一种便宜的操作,而消费它可能会很昂贵,具体取决于流管道和流中潜在元素的数量。

在这种情况下,流源是一个List尽管许多其他类型也可以充当数据源。 我们将在本文的其余部分中介绍一些最有用的源替代方法。

流主要适合于处理对象的集合,并且可以对任何类型T元素进行操作。 尽管存在三种特殊的Stream实现; IntStreamLongStreamDoubleStream仅限于处理相应的原始类型。

可以通过以下方式调用Stream.empty()来生成任何这些类型的空Stream:

Stream <T>     Stream.empty()
IntStream  IntStream.empty()
LongStream  LongStream.empty()
DoubleStream  DoubleStream.empty()

在某些情况下,空流确实很方便,但是大多数时候,我们对用元素填充流感兴趣。 这可以通过多种方式来实现。 我们将从IntStream的特殊情况入手,因为它提供了多种有用的方法。

一个基本情况是在少量项目上生成流。 这可以通过使用IntStream.of()列出整数来完成。 下面的代码产生元素1、2和3的简单流。

IntStream oneTwoThree = IntStream.of(1, 2, 3);

如果项目数量增加,手动列出所有元素可能很乏味。 如果我们对某个范围内的值感兴趣,则命令.rangeClosed()更有效。 该操作包含所有内容,这意味着以下代码将生成从1到9的所有元素的流。

 IntStream positiveSingleDigits = IntStream.rangeClosed( 1 , 9 ); 

.iterate()甚至是更强大的命令,它可以在包括哪些数字方面提供更大的灵活性。 下面,我们显示一个示例,说明如何使用它生成具有2的幂的所有数字的Stream。

 IntStream powersOfTwo = IntStream.iterate( 1 , i -> i * 2 ); 

还有几种可能更意外的方式来生成Stream。 chars()方法可用于流式处理
String ,在这种情况下为元素“ A”,“ B”和“ C”。

 IntStream chars = "ABC" .chars(); 

还有一种生成随机整数流的简单方法。

 IntStream randomInts = new Random().ints(); 

流现有数据收集是另一种选择。 我们可以流式传输现有Array的元素,或者选择使用Stream.of()手动列出项目,如前所示并在下面重复。

String[] array = {"Monkey", "Lion", "Giraffe", "Lemur"};
Stream <String> stream2 = Stream.of(array);
Stream <String> stream = Stream.of("Monkey", "Lion", "Giraffe", "Lemur");

流任何Collection也非常简单。 以下示例演示了如何使用简单命令流式传输List或Set
.stream()

List <String> list = Arrays.asList("Monkey", "Lion", "Giraffe", "Lemur");
Stream <String> streamFromList = list.stream();
Set set = new HashSet<>(list);
Stream <String> streamFromSet = set.stream();

有时,流式传输文本文件的内容也很有用。 以下命令将提供一个Stream ,将引用文件中的每一行作为单独的元素保存。

Stream <String> lines = Files.lines(Paths.get("file.txt"));

现在,我们已经使您熟悉了创建Stream的一些方法,我们鼓励您克隆此GitHub存储库并开始练习。 本文的内容足以解决第一个称为“创建”的单元。 Unit1Create接口包含JavaDocs,该JavaDocs描述Unit1MyCreate方法的预期实现。

public interface Unit1Create {/*** Creates a new Stream of String objects that contains* the elements "A", "B" and "C" in order.** @return a new Stream of String objects that contains*   the elements "A", "B" and "C" in order*/Stream <String> newStreamOfAToC();

提供的测试(例如Unit1MyCreateTest)将用作自动评分工具,让您知道您的解决方案是否正确。

如果尚未执行此操作,请继续解决Unit1MyCreate类中的工作项。 “需要把他们全都抓到”。

在下一篇文章中,我们将继续描述可应用于这些Stream并将它们转换为其他Stream的几种中间操作。 再见!

翻译自: https://www.javacodegeeks.com/2019/10/become-a-master-of-java-streams-creating-streams.html

java 用流创建流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java的for循环

一、普通for循环&#xff08;1&#xff09;for循环语法 for&#xff08;initialization; condition; update&#xff09;{statements;} &#xff08;2&#xff09;语法解释 1、for语句执行时&#xff0c;首先执行初始化操作&#xff08;initialization&#xff09;&#xff0c…

XML——使用 XPath来定位信息+使用命名空间

【0】README 0.1&#xff09;本文文字描述转自 core java volume 2 &#xff0c; 旨在理解 XML——使用 XPath来定位信息使用命名空间 的基础知识 &#xff1b; 0.2&#xff09; for detailed XPath info &#xff1a; please visit ( http://www.ruanyifeng.com/blog/2009/…

计算机教室英语怎么读音,网络教室,network classroom,音标,读音,翻译,英文例句,英语词典...

多媒体教室1.多媒体教室基本组成多媒体教室由多媒体计算机、液晶投影机、数字视频展示台、中央控制系统、投影屏幕、音响设备等多种现代教学设备组成。(1)多媒体液晶投影机是整个多媒体演示教室中最重要的也是最昂贵的设备&#xff0c;它连接着计算机系统、所有视频输出系统及数…

算法一之简单选择排序

一、 选择排序的思想 选择排序的基本思想是&#xff1a;每一趟在n-i1&#xff08;i1&#xff0c;2&#xff0c;…n-1&#xff09;个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。简单选择排序的基本思想&a…

XML——流机制解析器

【0】README 0.1&#xff09; 本文文字描述转自 core java volume 2 &#xff0c; 旨在理解 XML——流机制解析器 的基础知识 &#xff1b; 0.2&#xff09; for detailed StAX, please visit http://blog.csdn.net/pacosonswjtu/article/details/50569728 【1】XML——流机制…

第512章 河系量子计算机,第512章、河系量子计算机

69中文网 www.69zww.cc&#xff0c;最快更新分身投胎万界最新章节&#xff01;但AI智能所容身的量子计算机就大得有些恐怖了。其总体积丝毫不亚于一个小型河系&#xff01;什么是河系&#xff1f;银河系&#xff0c;仙女星系等等都是大小不等的河系&#xff01;而AI智能容身的量…

idea内置junit5_JUnit 5和Selenium –使用Selenium内置的`PageFactory`实现页面对象模式

idea内置junit5Selenium是一组支持浏览器自动化的工具和库&#xff0c;主要用于Web应用程序测试。 Selenium的组件之一是Selenium WebDriver&#xff0c;它提供客户端库&#xff0c;JSON有线协议&#xff08;与浏览器驱动程序进行通信的协议&#xff09;和浏览器驱动程序。 Sel…

算法二之树形选择排序

一、树形选择排序的基本思想 &#xff08;1&#xff09; 树形选择排序又称锦标赛排序&#xff08;Tournament Sort&#xff09;&#xff0c;是一种按照锦标赛的思想进行选择排序的方法。首先对n个记录的关键字进行两两比较&#xff0c;然后在n/2个较小者之间再进行两两比较&am…

计算机声卡型号价格,怎么查看电脑的声卡型号?查看声卡型号方法介绍

声卡是电脑上的硬件设施&#xff0c;任何电脑上的硬件都需要使用驱动使其运行&#xff0c;那么我们下载驱动的时候就会用到声卡型号&#xff0c;那么怎么查看电脑的声卡型号?下面小编就为大家详细介绍一下&#xff0c;一起来看看吧&#xff01;使用命令查看1、首先呢&#xff…

spring 配置只读事务_只读副本和Spring Data第1部分:配置数据库

spring 配置只读事务这是有关我们为利用只读副本来提高应用程序性能而寻求的一系列博客文章。 对于这个项目&#xff0c;我们的目标是建立我们的spring数据应用程序&#xff0c;并使用read仓库进行写操作&#xff0c;并基于read副本进行读操作。 为了模拟这种环境&#xff0c…

XML—— XSL 转换

【0】README 0.1&#xff09; 本文文字描述转自 core java volume 2 &#xff0c; 旨在理解 XML—— XSL 转换 的基础知识 &#xff1b; 0.2&#xff09;XSL 转换&#xff1a; XSL 转换&#xff08;eXtensible StyleSheet Language扩展样式表语言&#xff09; (for detailed…

算法三之堆排序

一、堆(Heap)定义 &#xff08;1&#xff09;n个关键字序列Kl&#xff0c;K2&#xff0c;…&#xff0c;Kn称为&#xff08;Heap&#xff09;&#xff0c;当且仅当该序列满足如下性质&#xff08;简称为堆性质&#xff09;&#xff1a; k(i)<k(2i&#xff09;且k(i)<k(2i…

计算机宏如何设置方法,excel 如何启用宏的方法,以及如何设置excel启用宏

如何启用宏呢&#xff1f;在进行如何启用宏讲解之前&#xff0c;先来认识&#xff0c;Excel几个其余宏相关的知识点。如果Excel工作簿中包含宏&#xff0c;则将在打开工作簿之前对其进行扫描&#xff0c;以检查是否存在已知病毒。Excel宏设置有四个选项&#xff0c;如下图所示&…

怎么清理句柄_JAR文件句柄:混乱后清理!

怎么清理句柄在Ultra ESB中&#xff0c;我们使用特殊的热交换类加载器 &#xff0c;该加载器使我们可以按需重新加载Java类。 这使我们能够从字面上热交换我们的部署单元 -加载&#xff0c;卸载&#xff0c;使用更新的类重新加载&#xff0c;以及正常地逐步退出-无需重启JVM。 …

XML——生成 XML 文档(读入 XML的反向过程)

【0】README 0.1&#xff09; 本文文字描述转自 core java volume 2 &#xff0c; 旨在理解 XML——生成 XML 文档&#xff08;读入 XML的反向过程&#xff09; 的基础知识 &#xff1b; 0.2&#xff09; for source code, please visit https://github.com/pacosonTang/core…

算法四之冒泡排序

一、冒泡排序&#xff08;Bubble Sort&#xff09;思想 &#xff08;1&#xff09;冒泡排序&#xff08;Bubble Sort&#xff09;&#xff0c;是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误…

java 使用sdk_使用SDKMAN管理多个Java SDK! 轻松

java 使用sdkSDKMAN&#xff01; 是用于管理多个软件开发套件的并行版本的便捷工具。 该工具对Java开发人员特别有用&#xff0c;因为它支持JVM的SDK&#xff0c;例如Java&#xff0c;Groovy&#xff0c;Scala&#xff0c;Kotlin和Ceylon。 还支持Gradle&#xff0c;Maven&…

ftp服务器在线查看文件内容,ftp服务器PDF文件在线查看的实现方法

URL形式&#xff1a;// http://localhost:2692/PDFVIEWER/web/viewer.html?filehttp://localhost:2692/TOV/DASystem/GetStreaem?path%3Dftp://ftp账号:ftp密码IP地址/0001/E_File3/2017526/test.PDF注意&#xff1a;PDFVIEWER/web/viewer.html是一个PDF插件地址链接后台方法…

XML——写出XML文档(XSLT+StAX)

【0】README 0.1&#xff09; 本文描述部分转自 core java volume 2 &#xff0c; 旨在理解 XML——写出XML文档&#xff08;XSLTStAX&#xff09; 的基础知识 &#xff1b; 0.2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java-volume…

算法五之快速排序

一、快速排序&#xff08;Quicksort&#xff09;思想设要排序的数组是A[0]……A[N-1]&#xff0c;首先任意选取一个数据&#xff08;通常选用数组的第一个数&#xff09;作为关键数据&#xff0c;然后将所有比它小的数都放到它前面&#xff0c;所有比它大的数都放到它后面&…