Documentation
¶
Index ¶
- type Sequence
- func (s Sequence[E]) Append(elems ...E) Sequence[E]
- func (s Sequence[E]) Collect() []E
- func (s Sequence[E]) Contains(elem E) bool
- func (s Sequence[E]) ContainsAll(elements ...E) bool
- func (s Sequence[E]) Count() int
- func (s Sequence[E]) Distinct() Sequence[E]
- func (s Sequence[E]) Each(consumer seq.Consumer[E]) Sequence[E]
- func (s Sequence[E]) Every(predicate seq.Predicate[E]) bool
- func (s Sequence[E]) Exists(predicate seq.Predicate[E]) bool
- func (s Sequence[E]) Filter(predicate seq.Predicate[E]) Sequence[E]
- func (s Sequence[E]) Find(predicate seq.Predicate[E]) optional.Value[E]
- func (s Sequence[E]) FindAll(predicate seq.Predicate[E]) Sequence[E]
- func (s Sequence[E]) FindLast(predicate seq.Predicate[E]) optional.Value[E]
- func (s Sequence[E]) Flush()
- func (s Sequence[E]) Fold(accumulator func(agg E, item E) E) optional.Value[E]
- func (s Sequence[E]) FoldRight(accumulator func(agg E, item E) E) optional.Value[E]
- func (s Sequence[E]) ForEach(consumer seq.Consumer[E])
- func (s Sequence[E]) IsEmpty() bool
- func (s Sequence[E]) IsNotEmpty() bool
- func (s Sequence[E]) Limit(n int) Sequence[E]
- func (s Sequence[E]) None(predicate seq.Predicate[E]) bool
- func (s Sequence[E]) NotContains(elem E) bool
- func (s Sequence[E]) Offset(n int) Sequence[E]
- func (s Sequence[E]) Partition(size int) iter.Seq[iter.Seq[E]]
- func (s Sequence[E]) Prepend(elems ...E) Sequence[E]
- func (s Sequence[E]) Reverse() Sequence[E]
- func (s Sequence[E]) Skip(n int) Sequence[E]
- func (s Sequence[E]) Take(n int) Sequence[E]
- func (s Sequence[E]) Tap(consumer func(E)) Sequence[E]
- func (s Sequence[E]) ToSlice(slice []E) []E
- func (s Sequence[E]) Union(other Sequence[E]) Sequence[E]
- func (s Sequence[E]) UnionAll(other Sequence[E]) Sequence[E]
- func (s Sequence[E]) Uniq() Sequence[E]
- func (s Sequence[E]) Where(predicate seq.Predicate[E]) Sequence[E]
Examples ¶
- AsSequence
- ConcatSequences
- Sequence.Append
- Sequence.Collect
- Sequence.Contains
- Sequence.ContainsAll
- Sequence.Count
- Sequence.Distinct
- Sequence.Each
- Sequence.Every
- Sequence.Exists
- Sequence.Filter
- Sequence.Find
- Sequence.FindAll
- Sequence.FindLast
- Sequence.Flush
- Sequence.Fold
- Sequence.FoldRight
- Sequence.ForEach
- Sequence.IsEmpty
- Sequence.IsNotEmpty
- Sequence.Limit
- Sequence.None
- Sequence.NotContains
- Sequence.Offset
- Sequence.Partition
- Sequence.Prepend
- Sequence.Reverse
- Sequence.Skip
- Sequence.Take
- Sequence.Tap
- Sequence.ToSlice
- Sequence.Union
- Sequence.UnionAll
- Sequence.Uniq
- Sequence.Where
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Sequence ¶
type Sequence[E comparable] struct { // contains filtered or unexported fields }
Sequence is a monad representing a sequence of elements.
func AsSequence ¶
func AsSequence[E comparable](seq iter.Seq[E]) Sequence[E]
AsSequence wraps an iter.Seq to provide a possibility to pipe several method calls.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3)) result := sequence.Collect() fmt.Println(result) }
Output: [1 2 3]
func ConcatSequences ¶
func ConcatSequences[E comparable](sequences ...Sequence[E]) Sequence[E]
ConcatSequences concatenates multiple sequences into a single sequence.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { seq1 := xseq.AsSequence(seq.Of(1, 2)) seq2 := xseq.AsSequence(seq.Of(3, 4)) concatenated := xseq.ConcatSequences(seq1, seq2) result := concatenated.Collect() fmt.Println(result) }
Output: [1 2 3 4]
func (Sequence[E]) Append ¶
Append appends elements to the end of a sequence.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3)) appended := sequence.Append(4, 5) result := appended.Collect() fmt.Println(result) }
Output: [1 2 3 4 5]
func (Sequence[E]) Collect ¶
func (s Sequence[E]) Collect() []E
Collect collects the elements of the sequence into a slice.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3)) result := sequence.Collect() fmt.Println(result) }
Output: [1 2 3]
func (Sequence[E]) Contains ¶
Contains returns true if the element is in the sequence.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) contains := sequence.Contains(3) fmt.Println(contains) }
Output: true
func (Sequence[E]) ContainsAll ¶
ContainsAll returns true if all elements are in the sequence.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) containsAll := sequence.ContainsAll(2, 3, 4) fmt.Println(containsAll) }
Output: true
func (Sequence[E]) Count ¶
Count returns the number of elements in the sequence.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3)) count := sequence.Count() fmt.Println(count) }
Output: 3
func (Sequence[E]) Distinct ¶
Distinct returns a new sequence with only unique elements. SQL-like alias for Uniq
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 2, 3, 3, 3)) distinct := sequence.Distinct() result := distinct.Collect() fmt.Println(result) }
Output: [1 2 3]
func (Sequence[E]) Each ¶
Each returns a new sequence that calls the consumer for each element of the sequence.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3)).Each(func(v int) { fmt.Println(v) }) sequence.Flush() }
Output: 1 2 3
func (Sequence[E]) Every ¶
Every returns true if all elements satisfy the predicate.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) every := sequence.Every(func(v int) bool { return v > 0 }) fmt.Println(every) }
Output: true
func (Sequence[E]) Exists ¶
Exists returns true if there is at least one element that satisfies the predicate.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) exists := sequence.Exists(func(v int) bool { return v > 3 }) fmt.Println(exists) }
Output: true
func (Sequence[E]) Filter ¶
Filter returns a new sequence with elements that satisfy the predicate.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) filtered := sequence.Filter(func(v int) bool { return v%2 == 0 }) result := filtered.Collect() fmt.Println(result) }
Output: [2 4]
func (Sequence[E]) Find ¶
Find returns the first element that satisfies the predicate.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) found := sequence.Find(func(v int) bool { return v > 3 }) fmt.Println(found.MustGet()) }
Output: 4
func (Sequence[E]) FindAll ¶
FindAll returns all elements that satisfy the predicate.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) foundAll := sequence.FindAll(func(v int) bool { return v > 3 }) result := foundAll.Collect() fmt.Println(result) }
Output: [4 5]
func (Sequence[E]) FindLast ¶
FindLast returns the last element that satisfies the predicate.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) found := sequence.FindLast(func(v int) bool { return v > 3 }) fmt.Println(found.MustGet()) }
Output: 5
func (Sequence[E]) Flush ¶
func (s Sequence[E]) Flush()
Flush consumes all elements of the input sequence.
Example ¶
package main import ( "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3)) sequence.Flush() // No output expected }
func (Sequence[E]) Fold ¶
Fold applies a function against an accumulator and each element in the sequence (from left to right) to reduce it to a single value.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) sum := sequence.Fold(func(agg, item int) int { return agg + item }) fmt.Println(sum.MustGet()) }
Output: 15
func (Sequence[E]) FoldRight ¶
FoldRight applies a function against an accumulator and each element in the sequence (from right to left) to reduce it to a single value.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of("a", "b", "c")) concat := sequence.FoldRight(func(agg, item string) string { return agg + item }) fmt.Println(concat.MustGet()) }
Output: cba
func (Sequence[E]) ForEach ¶
ForEach calls the consumer for each element of the sequence.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { xseq.AsSequence(seq.Of(1, 2, 3)).ForEach(func(v int) { fmt.Println(v) }) }
Output: 1 2 3
func (Sequence[E]) IsEmpty ¶
IsEmpty returns true if the sequence is empty.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of[int]()) isEmpty := sequence.IsEmpty() fmt.Println(isEmpty) }
Output: true
func (Sequence[E]) IsNotEmpty ¶
IsNotEmpty returns true if the sequence is not empty.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3)) isNotEmpty := sequence.IsNotEmpty() fmt.Println(isNotEmpty) }
Output: true
func (Sequence[E]) Limit ¶
Limit returns a new sequence that contains only the first n elements of the given sequence. SQL-like alias for Take
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) limited := sequence.Limit(2) result := limited.Collect() fmt.Println(result) }
Output: [1 2]
func (Sequence[E]) None ¶
None returns true if no element satisfies the predicate.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) none := sequence.None(func(v int) bool { return v > 5 }) fmt.Println(none) }
Output: true
func (Sequence[E]) NotContains ¶
NotContains returns true if the element is not in the sequence.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) notContains := sequence.NotContains(6) fmt.Println(notContains) }
Output: true
func (Sequence[E]) Offset ¶
Offset returns a new sequence that skips the first n elements of the given sequence. SQL-like alias for Skip
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) offset := sequence.Offset(2) result := offset.Collect() fmt.Println(result) }
Output: [3 4 5]
func (Sequence[E]) Partition ¶
Partition splits the sequence into chunks of the given size.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) partitions := sequence.Partition(2) for partition := range partitions { fmt.Println(seq.Collect(partition)) } }
Output: [1 2] [3 4] [5]
func (Sequence[E]) Prepend ¶
Prepend prepends elements to the beginning of a sequence.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(3, 4, 5)) prepended := sequence.Prepend(1, 2) result := prepended.Collect() fmt.Println(result) }
Output: [1 2 3 4 5]
func (Sequence[E]) Reverse ¶
Reverse returns a new sequence with elements in reverse order.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3)) reversed := sequence.Reverse() result := reversed.Collect() fmt.Println(result) }
Output: [3 2 1]
func (Sequence[E]) Skip ¶
Skip returns a new sequence that skips the first n elements of the given sequence.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) skipped := sequence.Skip(2) result := skipped.Collect() fmt.Println(result) }
Output: [3 4 5]
func (Sequence[E]) Take ¶
Take returns a new sequence that contains only the first n elements of the given sequence.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) taken := sequence.Take(3) result := taken.Collect() fmt.Println(result) }
Output: [1 2 3]
func (Sequence[E]) Tap ¶
Tap returns a new sequence that calls the consumer for each element of the sequence.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3)).Tap(func(v int) { fmt.Println(v) }) sequence.Flush() }
Output: 1 2 3
func (Sequence[E]) ToSlice ¶
func (s Sequence[E]) ToSlice(slice []E) []E
ToSlice collects the elements of the sequence into a given slice.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3)) var slice []int result := sequence.ToSlice(slice) fmt.Println(result) }
Output: [1 2 3]
func (Sequence[E]) Union ¶
Union returns a new sequence that contains all distinct elements from both input sequences.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { seq1 := xseq.AsSequence(seq.Of(1, 2, 3)) seq2 := xseq.AsSequence(seq.Of(3, 4, 5)) union := seq1.Union(seq2) result := union.Collect() fmt.Println(result) }
Output: [1 2 3 4 5]
func (Sequence[E]) UnionAll ¶
UnionAll returns a new sequence that contains all elements from both input sequences.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { seq1 := xseq.AsSequence(seq.Of(1, 2, 3)) seq2 := xseq.AsSequence(seq.Of(3, 4, 5)) unionAll := seq1.UnionAll(seq2) result := unionAll.Collect() fmt.Println(result) }
Output: [1 2 3 3 4 5]
func (Sequence[E]) Uniq ¶
Uniq returns a new sequence with only unique elements.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 2, 3, 3, 3)) unique := sequence.Uniq() result := unique.Collect() fmt.Println(result) }
Output: [1 2 3]
func (Sequence[E]) Where ¶
Where returns a new sequence with elements that satisfy the predicate. SQL-like alias for Filter
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/seq" "github.com/go-softwarelab/common/x/xseq" ) func main() { sequence := xseq.AsSequence(seq.Of(1, 2, 3, 4, 5)) filtered := sequence.Where(func(v int) bool { return v%2 == 0 }) result := filtered.Collect() fmt.Println(result) }
Output: [2 4]