Java Stream forEach()和forEachOrdered()方法
时间:2020-02-23 14:36:53 来源:igfitidea点击:
Java Stream forEach()和forEachOrdered()是终端操作。
forEach()方法用于对流的每个元素执行操作。
如果将forEach()方法与并行流一起使用,则不会维护遇到顺序。
该操作将在每个元素上执行,但是它们的顺序不会固定。如果要按遇到顺序对流元素执行某些操作,则应使用forEachOrdered()方法。
基础集合必须具有遇到顺序,否则forEachOrdered()将无法遵守该顺序。
因此,将其与TreeSet或者TreeMap一起使用是没有用的。forEachOrdered()操作在每个流元素上一一执行,因此它比forEach()方法要慢一些。
在并行流上使用forEachOrdered()不能提供并行流的好处,因此在并行流上使用它没有多大意义。
Java Stream forEach()和forEachOrdered()方法签名
void forEach(Consumer<? super T> action) void forEachOrdered(Consumer<? super T> action);
消费者是一个功能接口。
它表示一个接受单个输入参数且不返回结果的操作。
流forEach()示例
让我们看一个简单的示例,以打印流中的所有元素。
jshell> Stream<Integer> streamNumbers = Stream.of(1, 2, 3, 4); streamNumbers ==> java.util.stream.ReferencePipeline$Head@5a10411 jshell> streamNumbers.forEach(System.out::println); 1 2 3 4 jshell>
并行流forEach()示例
让我们看看将forEach()与并行流一起使用会发生什么。
jshell> List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7); list ==> [1, 2, 3, 4, 5, 6, 7] jshell> list.parallelStream().forEach(System.out::println); 5 4 1 3 2 7 6 jshell>
流forEach()示例
请注意,流元素按随机顺序获取。
当forEach()对流元素执行操作时,将不遵守元素的遇到顺序。
并行流forEachOrdered()示例
让我们看看将forEachOrdered()与列表元素的并行流一起使用会发生什么。
jshell> List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7); list ==> [1, 2, 3, 4, 5, 6, 7] jshell> list.parallelStream().forEachOrdered(System.out::println); 1 2 3 4 5 6 7 jshell>