当前位置: 首页 > 知识库问答 >
问题:

每个循环的java8内部工作

陶元凯
2023-03-14

我是java8的新手。我试图理解Streams中foreach循环的工作原理。我的代码如下:-

Stream<String> s = someist.stream();
Consumer<String> consumer = (String s1)->System.out.println(s1);
s.forEach(consumer);

问题是,当我只是传递消费者的引用而不是调用其中的consumer.accept时,Foreach循环如何知道调用consumer.accept(T t)。尽管,当我们为函数接口提供一些lambda表达式时,我们需要调用它的抽象方法,但我们只是没有在这里调用它。那么,Foreach循环如何知道它应该如何处理作为参数提供的消费者引用呢?

共有3个答案

李谦
2023-03-14

这就是< code >功能接口的工作方式。它们只有一个< code>abstract方法。可能有可选的< code>default方法。< code>abstract方法的行为以< code>lambda expression的形式传递(像传递数据一样传递行为)。反过来,该行为是< code >函数接口的< code >抽象方法的方法体。使用名称调用< code>default方法。

因此,当您将<code>Functional Interface</code>作为方法参数传递给另一个方法时,在本例中,<code>Consumer

这样说,逻辑上,如果只有<code>Functional Interface</code>作为参数传递,那么只有一个方法可以调用。

计向晨
2023-03-14

正如java doc所说:

< code>void forEach(消费者

对此流的每个元素执行操作。

i、 e传递给forEach方法的行为参数将在源的每个元素内部调用

井兴怀
2023-03-14

forEach的具体实现将调用accept,例如:

public class MyStream implements Stream<String> {

    @Override
    public void forEach(Consumer<? super String> action) {
        while (hasNext()) {
            action.accept(next());
        }
    }

    ...
}
 类似资料:
  • 我试图在for循环中获得for循环,因此输出如下: 我希望输出显示一个正方形 我不知道它为什么不这样做。下面是我的代码:

  • 我需要12次外循环,每个外循环1次内循环 例如: 等 但现在我的内循环在第一次迭代的外循环上运行。 请帮助我如何使用for循环执行此操作。

  • 问题内容: 我注意到在.each()循环中的jQuery中使用AJAX时遇到问题。执行脚本时,仅更新数据库中的第一条记录。 这是我的脚本: 以及save.php的内容: 我已经读过我可以选择使用同步而不是异步,但是我也读过,这不是一个好习惯。 那么,我实际上如何异步完成此工作并解决问题? 问题答案: jQuery的$ .ajax()返回jQuery XMLHttpRequest对象(“ jqXHR

  • 问题内容: 我在进行函数调用时试图找到for-each循环的工作方式。请参阅以下代码, 在版本1中,我在for- each循环中调用returnArr()方法,在版本2中,我显式调用returnArr()方法并将其分配给数组,然后对其进行迭代。两种方案的结果都相同。我想知道哪个更有效以及为什么。 我认为版本2会更高效,因为我不会在每次迭代中都调用method。但是令我惊讶的是,当我使用版本1调试代

  • 问题内容: 我正在尝试将此for循环重写为for每个循环。 这就是我尝试过的 谁能指出我正确的方向?谢谢。 问题答案: 我认为您想得太多… :)

  • 下面AtomicBigInteger实现的方法是原子操作吗?我特别想知道部分。JVM是否以某种方式保证for循环中的每个循环都是原子式执行的? 我从这里得到了这段代码:是否可以以线程安全的方式安全地递增BigInteger,也许可以使用AtomicReference,W/O锁定?然而,这个实现正在进行中,您可以在Internet上的许多不同地方找到它。