Skip to main content
Help improve this documentation

This documentation is still new and evolving. If you spot any mistakes, unclear explanations, or missing details, please open an issue.

Your feedback helps us improve!

Iter operatorsโ€‹

This page lists all operators available in the iter sub-package of ro.

Installโ€‹

First, import the sub-package in your project:

go get -u github.com/samber/ro/plugins/iter
  • Creates an observable from a Go iter.Seq iterator.

    import (
    "iter"

    "github.com/samber/ro"
    roiter "github.com/samber/ro/plugins/iter"
    )

    slice := []int{1, 2, 3, 4, 5}
    iterator := func(yield func(int) bool) {
    for _, v := range slice {
    if !yield(v) {
    break
    }
    }
    }

    obs := roiter.FromSeq(iterator)

    sub := obs.Subscribe(ro.PrintObserver[int]())
    defer sub.Unsubscribe()

    // Next: 1
    // Next: 2
    // Next: 3
    // Next: 4
    // Next: 5
    // Completed
    Prototype:
    func FromSeq[T any](iterator iter.Seq[T])
  • Creates an observable from a Go iter.Seq2 iterator.

    import (
    "iter"

    "github.com/samber/ro"
    roiter "github.com/samber/ro/plugins/iter"
    "github.com/samber/lo"
    )

    m := map[string]int{"a": 1, "b": 2, "c": 3}
    iterator := func(yield func(string, int) bool) {
    for k, v := range m {
    if !yield(k, v) {
    break
    }
    }
    }

    obs := roiter.FromSeq2(iterator)

    sub := obs.Subscribe(ro.PrintObserver[lo.Tuple2[string, int]]())
    defer sub.Unsubscribe()

    // Next: {Data1: a Data2: 1}
    // Next: {Data1: b Data2: 2}
    // Next: {Data1: c Data2: 3}
    // Completed
    Prototype:
    func FromSeq2[K, V any](iterator iter.Seq2[K, V])
  • Converts an observable to a Go iter.Seq iterator.

    import (
    "fmt"
    "iter"

    "github.com/samber/ro"
    roiter "github.com/samber/ro/plugins/iter"
    )

    obs := ro.Just(1, 2, 3, 4, 5)
    iterator := roiter.ToSeq(obs)

    for v := range iterator {
    fmt.Println("Value:", v)
    }

    //
    // Value: 1
    // Value: 2
    // Value: 3
    // Value: 4
    // Value: 5
    Prototype:
    func ToSeq[T any](source ro.Observable[T]) iter.Seq[T]
  • Converts an observable to a Go iter.Seq2 iterator with index.

    import (
    "fmt"
    "iter"

    "github.com/samber/ro"
    roiter "github.com/samber/ro/plugins/iter"
    )

    obs := ro.Just("a", "b", "c")
    iterator := roiter.ToSeq2(obs)

    for i, v := range iterator {
    fmt.Printf("Index: %d, Value: %s\n", i, v)
    }

    //
    // Index: 0, Value: a
    // Index: 1, Value: b
    // Index: 2, Value: c
    Prototype:
    func ToSeq2[T any](source ro.Observable[T]) iter.Seq2[int, T]