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

为什么流::迭代器在java中可能返回Iterable?

傅彬
2023-03-14

我正在阅读有效的java,有一个问题。我不理解为什么流迭代器返回Iterable。据我所知,Iterable包含迭代器接口。但在流api中,即使迭代器没有继承Iterable,这段代码仍在工作。

    public static <E> Iterable<E> iterableOf(Stream<E> stream){
        return stream::iterator;
    }

我对这些代码很困惑。因为迭代器和Iterable之间没有关系,除了Iterable有迭代器。

共有1个答案

岳毅
2023-03-14

<代码>Iterable

这意味着任何不带参数并返回迭代器的lambda

现在,符号stream::迭代器是lambda()的语法糖-

 类似资料:
  • 我可以看到返回。但是现在已经添加到C++20标准中,为什么返回?cppreference指定: 返回值 等于last的迭代器。 这个选择背后的理性是什么? 与相比,用例的优势是什么?

  • 问题内容: 为什么接口不扩展? 该方法可以简单地返回。 是故意的还是对Java设计师的监督? 能够将循环与这样的迭代器一起使用将很方便: 其中返回迭代器。 问题答案: 因为迭代器通常指向集合中的单个实例。Iterable意味着可以从一个对象获得迭代器以遍历其元素-无需迭代单个实例(迭代器代表的是该实例)。

  • 在Java8中,我们有类stream ,奇怪的是,它有一个方法 所以您希望它实现interface Iterable ,这恰恰需要这个方法,但事实并非如此。 当我想使用foreach循环对流进行迭代时,我必须执行如下操作 我是不是漏了什么?

  • 我知道这个问题在这个论坛上已经被问过好几次了。但我仍在发帖,因为没有一个答案看起来是具体的。专家们,你们能帮我理解什么时候使用迭代器吗。当我们有一个非常大的数据集时,我们是理想地使用它,还是当我们有大量数据要返回时,将其用作方法的返回类型?

  • 我正在尝试研究java单词计数示例。据我所知,spark RDD是一种特殊类型的集合,而flat map基本上转换一个嵌套的集合(比如Stream>=>Stream),那么为什么下面一行中的spark Java API需要为每一行返回一个迭代器呢?如何在RDD中使用? 函数不是应该在arrays.aslist(line.toString().split(“”))结束吗?

  • 我一直在玩Java新的和闪亮的功能部分,最让我困惑的事情之一是流? 它们有什么用? 在谷歌上,我主要找到了如何使用它们的解释和实际例子,我已经记下来了,没有关于幕后魔法的具体内容,这是我感兴趣的。 我的意思并不是说,从实际意义上讲,我从一些函数语言中找到了map/filter/reduce/etc。相当快,但为什么我们需要先转换为流?Java已经有了迭代器。流和迭代器之间是否有根本的区别,比如一个