Java 8 forEach() 方法2025 年 4 月 21 日 | 阅读 4 分钟 Java 8 中的 `forEach()` 方法是一种简单的方式来遍历集合,从而使函数式编程范例更接近 Java 程序员。它是 `Iterable` 接口的成员,接受一个 `Consumer` 函数式接口作为输入。这使得编程简洁明了,因为不需要传统的循环中的样板代码。继承了 `Iterable` 接口的集合类都可以使用 `forEach` 循环来遍历元素。 此方法接受一个参数,该参数是一个函数式接口。因此,我们可以将 lambda 表达式作为参数传递。 `Iterable` 接口中的 `forEach()` 签名default: 此关键字的存在意味着该方法在该接口中具有默认实现。为了解决接口方法默认实现破坏现有代码的问题,Java 8 引入了所谓的默认方法。 void: 它表示方法的返回类型。在这里,`forEach` 不提供任何值。实际上,它对集合中的每个元素执行一个操作。 forEach: 这是方法的名称。这表明它作为一个循环运行,集合的每个元素都用于执行特定操作。 (Consumer<? super T> action): 这部分说明了方法的参数。参数是 `Consumer` 接口类型,它位于 `java.util.function` 包中。函数式接口是只提供一个抽象方法的接口。`Consumer` 接口表示一个操作数,其操作只需要一个输入参数且不返回任何输出。 在这里,输入参数中的 T 代表集合中对象的类型。<? 首先,超类型边界允许 `consumer` 解释提供的 T 的任何超类,这使得对元素可以执行的操作类型变得灵活。 相比传统循环的优点
Java 8 forEach() 示例 1ForEachExample.java 输出 ------------Iterating by passing lambda expression-------------- Football Cricket Chess Hocky Java 8 forEach() 示例 2ForEachExample.java 输出 ------------Iterating by passing method reference--------------- Football Cricket Chess Hocky Java Stream `forEachOrdered()` 方法Java 流中的 `forEachOrdered()` 方法与 `forEach()` 方法类似。它按照流的遇到顺序对流中的每个元素执行提供的操作。但是,与允许无序并行执行的 `forEach()` 不同,`forEachOrdered()` 保证元素按照流指定的顺序处理。 签名 (Consumer<? super T> action) 是 `forEachOrdered` 方法的参数。它接受 `Consumer` 函数式接口的实例。 consumer 是 `java.util.function` 包中定义的函数式接口。它表示一个接受单个输入参数而不返回任何结果的操作。 <? super T> 是一个通配符边界,它允许 `Consumer` 接受 T 的任何超类,从而为可以对流元素执行的操作类型提供了灵活性。 action 是参数的名称,它表示要对流中的每个元素执行的操作。调用 `forEachOrdered` 方法时,此操作由用户指定。 用法:这种方法通常利用流来处理来自每个流的项目并保持遇到顺序。对于有序流或处理顺序很重要的序列,它是一种非常有效的逻辑运算符。 遇到顺序:例如,流的遇到顺序描述了流元素在处理过程中如何被遇到。对于有序流,例如来自列表和数组的流,遇到顺序与源集合的迭代顺序相同。对于无序流或从集合创建的流,遇到顺序将是未定义或不重复的。 顺序流与并行流:当涉及到流时,`forEachOrdered()` 保证操作将根据遇到顺序对每个项目执行,而与并行性无关。值得一提的是,虽然 `forEach()` 允许松散的并行执行,其中元素顺序是非确定性的,但 `for` 循环确保逻辑顺序执行。 Java Stream `forEachOrdered()` 方法示例Java Stream `forEachOrdered()` 方法示例输出 ------------Iterating by passing lambda expression--------------- Football Cricket Chess Hocky ------------Iterating by passing method reference--------------- Football Cricket Chess Hocky |
我们请求您订阅我们的新闻通讯以获取最新更新。