java8 stream_Java 8 Stream中间操作(方法)示例

java8 stream

java8 stream

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

java8 stream

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值