Java 8 Streams中间操作的完整指南。 所有内置Stream API中间操作(方法)的列表以及示例。

1.概述

在本教程中,我们将学习什么是 Java 8 Stream 中的中间操作 。 所有这些操作都在java.util.stream.Stream

在上一教程中,我们讨论了Java 8 Stream APILambda Expressions

规则:

Java 8 Stream中间操作返回另一个Stream ,该Stream允许您以查询的形式调用多个操作。


在调用终端操作之前,流中间操作不会执行。

所有的中间操作都是惰性的,因此直到实际需要处理结果时才执行它们。

在执行管道的终端操作之前,流的遍历不会开始。

这是所有Stream中间操作的列表:

过滤()
地图()
flatMap()
不同()
sorted()
窥视()
限制()
跳跃(

我们将在后续文章中看到有关每个操作的示例程序。

2. filter()

返回由该流的元素组成的流
匹配给定的谓词

句法:

 Stream filter​(Predicate predicate) 

例:

 Stream intStream = Stream.of( 1 , 2 , 3 , 4 , 5 );  Stream subStream = intStream.filter(value -> value > 3 );  long count = subStream.count();  System.out.println(count); 

输出:

 2 

该程序将Predicate功能接口用作lambda,并检查数字是否大于3。

3. map()

返回包含以下内容的流
将给定功能应用于此流元素的结果

句法:

 Stream map​(Function mapper) 

例:

 // map() Operation  Stream strStream = Stream.of( "Welcome" , "To" , "java" , "blog" );  Stream subStream2 = strStream.map(string -> { if (string == "java" ) return "Java-W3schools" ; return string;  });  List welomeList = subStream2.collect(Collectors.toList());  System.out.println(welomeList); 

在此,map函数采用Function的参数类型。 该功能是一个功能接口,并具有一种方法
apply() 。 此方法采用一个值并返回另一个值。

输出:

 [Welcome, To, Java-W3schools, blog] 

在此示例中,将单词“ java”替换为“ Java-W3schools”。

map()wrpper类型也属于中间操作类别。

mapToDouble(),mapToLong(),mapToInt()

4. flatMap()

此平面图最适合于收藏列表。 我们将显示带有两个列表的示例,以及如何使用它们将它们转换为单个流
flatmap()方法。

句法:

 Stream flatMap​(Function> mapper) 

例:

示例程序可计算两个列表中唯一水果名称的数量。

 Stream flatStream = stream.flatMap(list -> list.stream());  //flatStream.forEach(str -> System.out.println(str));  long distinctFruites = flatStream.distinct().count();  System.out.println(distinctFruites); 

输出:

 6 

并且在使用Stream“ 流已被操作或关闭 ”时也看到了解决方案中最常见的问题。 取消换行后flatStream.forEach(str-> System.out.println(str)); 此程序将异常java.lang.IllegalStateException

类似包装器类型的flatMap()方法,例如flatMapToInt(),flatMapToLong(),flatMapToDouble()

5,distinct()

返回由该流的不同元素组成的流 (根据Object.equals(Object))。

对于有序流,对不同元素的选择是稳定的(对于重复元素,将保留在遇到顺序中首先出现的元素。)对于无序流,则不保证稳定性。

句法:

 Stream distinct() 

例:

 // distinct() Operation  Stream fruitsStream = Stream.of( "Apple" , "Jack Fruit" , "Water Melon" Stream fruitsStream = Stream.of( "Water Melon" , "Apple" );  Stream distinctStream = fruitsStream.distinct();  distinctStream.forEach(name -> System.out.println(name)); 

输出:

 Apple  Jack Fruit  Water Melon 

6. sorted()

返回由该流的元素组成的流,并根据自然顺序排序。

如果此流的元素不可比较,则在执行终端操作时可能会引发java.lang.ClassCastException。


注意 :对于有序流,排序是稳定的。 对于无序流,不保证稳定性。

句法:

 Stream sorted() 

例:

 // sort() Operation  Stream vegStream = Stream.of( "tomoto" Stream vegStream = Stream.of( "tomoto" , "Green Chilli" , "Pototo" , "Beet root" );  Stream sortedStream = vegStream.sorted();  sortedStream.forEach(name -> System.out.println(name)); 

输出:

 Beet root  Green Chilli  Pototo  tomoto 

7. peek()

返回由该流的元素组成的流,并在从结果流中消耗元素时对每个元素另外执行提供的操作。

peek()方法是在Java 8中调试流的最佳方法。eclipse将不支持调试。

注意:我们无法预测并行流管道的peek()调用顺序。

句法:

 Stream peek​(Consumer action) 

例:

 // peek() Operation  Stream.of( "one" , "two" , "three" , "four" ).filter(e -> e.length() > 3 ) .peek(e -> System.out.println( "Filtered value: " + e)).map(String::toUpperCase) .peek(e -> System.out.println( "Mapped value: " + e)).collect(Collectors.toList()); 

对于每次满足过滤条件的条件,将立即调用peek()方法。 看到输出,您将更好地理解。

输出:

 Filtered value: three  Mapped value: THREE  Filtered value: four  Mapped value: FOUR 

8. limit()

返回具有指定大小的流 。 它将截断流中剩余的元素。


注意: limit()适用于顺序流,不能为并行流提供良好的性能结果。

句法:

 Stream limit​( long maxSize) 

例:

程序将流限制为前两个元素。

 Stream.of( "one" , "two" , "three" , "four" ).limit( 2 ).forEach(item -> System.out.println(item)); 

输出:

 one  two 

9. skip()

此方法跳过给定的n个元素,并返回Stream。 当要对列表或流中的最后n条记录或行执行任何操作时,这是最有用的。

句法:

 Stream skip​( long n) 

例:

程序跳过前两个元素并打印其余元素。

 Stream.of( "one" , "two" , "three" , "four" , "five" ).skip( 2 ).forEach(item -> System.out.println(item)); 

输出:

 three  four  five 

10.结论

在本教程中,我们已经了解了什么是流中的中间操作。 中间操作如何在新的Java 8 Streams中工作。

并且还讨论了带有示例程序的所有中间方法的列表。

这篇文章中显示的所有程序都通过GitHub进行

翻译自: https://www.javacodegeeks.com/2020/04/java-8-stream-intermediate-operations-methods-examples.html

Java 8 Stream中间操作(方法)示例相关推荐

  1. 使用Java 8 Stream像操作SQL一样处理数据(上)

    转载自 使用Java 8 Stream像操作SQL一样处理数据(上) 几乎每个Java应用都要创建和处理集合.集合对于很多编程任务来说是一个很基本的需求.举个例子,在银行交易系统中你需要创建一个集合来 ...

  2. java 8 Stream中操作类型和peek的使用

    文章目录 简介 中间操作和终止操作 peek 结论 java 8 Stream中操作类型和peek的使用 简介 java 8 stream作为流式操作有两种操作类型,中间操作和终止操作.这两种有什么区 ...

  3. Java 8 Stream.distinct() 列表去重示例

    Java 8 Stream.distinct() 示例 在这篇文章里,我们将提供Java8 Stream distinct()示例. distinct()返回由该流的不同元素组成的流.distinct ...

  4. 吃透JAVA的Stream流操作,多年实践总结

    在JAVA中,涉及到对数组.Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行处理. 例如,现在有这么一个需求: 从给定句子中返回单词 ...

  5. 【Java】Stream流和方法引用

    1 Stream流 1.1 Stream流优化过滤集合 传统方式 用一个循环过滤姓张的人 用一个循环过滤名字长度大于2的人 public static void main(String[] args) ...

  6. JAVA的stream流操作详细解析

    java的stram流操作 为什么需要 Stream 流与集合的区别 对比:原始集合操作与Stream集合操作 (过滤/映射/扁平化/遍历/排序/去重/跳过/截断的应用) 流的组成 流操作的分类 流的 ...

  7. java jdk8 Stream流操作学习

    Stream流有一些特性: Stream流不是一种数据结构,不保存数据,它只是在原数据集上定义了一组操作. 这些操作是惰性的,即每当访问到流中的一个元素,才会在此元素上执行这一系列操作. Stream ...

  8. 【小家java】Stream流操作的有状态 vs 无状态

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

  9. java 映射施舍呢,黑猴子的家:Java 8 - Stream 中间操作(映射)

    1.概念 多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何的处理!而在终止操作时一次性全部处理,称为"惰性求值". 2.映射 3.map ...

最新文章

  1. CCF201503-4 网络延时(100分)
  2. MVC5路由系统机制详细讲解
  3. Javascript获取数组中最大和最小值
  4. 详细解读Spring2.5 +Struts1.3 框架(使用Spring声明式事物管理和springjjdbc模板)
  5. 揭秘微软6万工程师DevOps成功转型的技术「武器」
  6. 查看本机装的 JDK 是32位还是64位的
  7. 51单片机dds信号发生器 扫频 c语言,基于AT89C51单片机和DDS器件实现频率特征测试仪的设计...
  8. html 展示 python结果_在HTML中显示Python值
  9. Object_C与JavaScript交互使用总结
  10. C++函数调用时堆栈的变化情况
  11. 通过代码触发dropdownlist_SelectedIndexChanged事件。
  12. javaWeb过滤器——Filter
  13. 克隆模式----快速与数据库比对数据
  14. 由三目运算符想出的PHP改进建议
  15. php ksc歌词,KSC字幕制作方法 KSC歌词编辑教程
  16. 苹果手机透明桌面_微信界面全局透明壁纸设置教程 苹果iOS与安卓手机弄法步骤...
  17. 如何将cad导成jpg图片格式?
  18. win7、10无法修改mac地址_教一招如何修改MAC地址
  19. 一维无限深势阱定态薛定谔方程
  20. python十二生肖_十二生肖入诗,妙趣横生,越读越有味道!

热门文章

  1. 欢乐纪中某B组赛【2019.1.24】
  2. jzoj1164-求和【欧拉函数,数论】(筛欧拉函数模板)
  3. 2021牛客暑期多校训练营2 G.League of Legends(转化+单调队列)
  4. 2017西安交大ACM小学期 文本查找[AC自动机]
  5. Spark入门(十六)之分组求TOP N最小值
  6. insert ... on duplicate key update产生death lock死锁原理
  7. Spring @Autowired 注释
  8. 解决“Maven项目中的Dynamic Web Module 3.0 requires Java 1.6 or newer”问题
  9. java爬虫之基于httpclient的简单Demo(二)
  10. 面试必问的 CAS ,要多了解