Skip to content

gogolibs/iterator

Repository files navigation

iterator

GoDoc Go Report Card CI codecov

iterator provides a generic Iterator[T] interface:

package iterator

type Iterator[T any] interface {
	HasNext() bool
	Next() T
}

Iterator implementation for slices

package main

import (
	"fmt"
	"github.com/gogolibs/iterator"
)

func main() {
	i := iterator.FromItems(1, 2, 3)
	fmt.Println(i.HasNext())               // true
	fmt.Println(i.Next())                  // 1
	fmt.Println(i.HasNext())               // true
	fmt.Println(i.Next())                  // 2
	fmt.Println(i.HasNext())               // true
	fmt.Println(i.Next())                  // 3
	fmt.Println(i.HasNext())               // false
	fmt.Println(i.Next())                  // panics
	i = iterator.FromSlice([]int{1, 2, 3}) // a different way to create iterator from slice
	s := iterator.ToSlice[int](i, 3)       // need to specify size of the slice here
	fmt.Println(s)                         // prints 1, 2, 3
}

ForEach function

package main

import (
	"fmt"
	"github.com/gogolibs/iterator"
)

func main() {
	i := iterator.FromItems(1, 2, 3)
	hasFinished := iterator.ForEach(i, func(item int) bool {
		if item == 2 {
			return false // stop iteration if the item is 2
		}
		fmt.Println(item) // will only print 1
		return true       // continue iteration
	})
	fmt.Println(hasFinished) // prints false because we stopped at 2
}

Chaining multiple iterators

package main

import (
	"fmt"
	"github.com/gogolibs/iterator"
)

func main() {
	i1 := iterator.FromItems(1, 2)
	i2 := iterator.FromItems(3, 4)
	chained := iterator.Chain[int](i1, i2)
	fmt.Println(iterator.ToSlice[int](chained, 4)) // prints 1, 2, 3, 4
}

Transforming an iterator

package main

import (
	"fmt"
	"github.com/gogolibs/iterator"
)

func main() {
	i := iterator.FromItems(1, 2, 3)
	t := iterator.Transform(i, func(item int) string {
		return fmt.Sprintf("user%d", item)
	})
	fmt.Println(iterator.ToSlice[string](t, 3)) // prints user1, user2, user3
}

About

Iterator pattern for Go1.18+ and utilities for it.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages