iterator - Rust 中是否有等同于 Java 的 Stream.Iterate 的函数?

标签 iterator rust

Rust 标准库是否像 Java 8 Streams 提供的那样,具有在给定种子和 lambda 的情况下生成无限迭代器的函数?如果没有,Rust 中的类似替代方案是什么?

Stream.iterate(1, x -> 2 * x);

最佳答案

Rust 标准库 used在名称 unfold 下具有类似的功能,但它从未变得稳定并最终被删除。它现在住在 itertools crate :

extern crate itertools;

use itertools::Unfold;

fn main() {
    let x = Unfold::new(1, |x| {
        *x *= 2;
        Some(*x)
    });

    for val in x.take(10) {
        println!("{}", val);
    }
}

请注意,它有点复杂,因为状态不必与迭代器返回的内容完全匹配,并且您可以控制迭代器何时停止。 crate 可能会接受顶部薄层的 PR,以提供您的确切实现。

关于iterator - Rust 中是否有等同于 Java 的 Stream.Iterate 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35908398/

相关文章:

c++ - 调用 `list<T>::end()` 不是很低效吗?

rust - 如何更改 Rust 中 &Path 的第一个祖先?

rust - 在 Rust 中实现图形结构

rust - 有没有办法在匹配中使用自定义模式,例如正则表达式或函数?

rust - 是否有可能具有比其自身尺寸更大的对齐方式?

c++ - 如何使用 std::istreambuf_iterator 初始化字符串

c++ - 为什么使用 rbegin() 而不是 end() - 1?

Java 迭代器不适用于单个可迭代对象

c++ - STL 迭代器继承 : 'value_type' does not name a type

rust - 使用 Append(false) 写入文件无法按预期工作