GoCollections/collections/Iterable.go

60 lines
1.0 KiB
Go
Raw Normal View History

2021-05-20 17:32:35 +08:00
package collections
2021-05-21 11:14:07 +08:00
import "github.com/tursom/GoCollections/exceptions"
2021-05-20 17:32:35 +08:00
type Iterator interface {
HasNext() bool
2021-05-21 09:41:58 +08:00
Next() (interface{}, error)
2021-05-20 17:32:35 +08:00
}
type Iterable interface {
Iterator() Iterator
}
type MutableIterator interface {
HasNext() bool
2021-05-21 09:41:58 +08:00
Next() (interface{}, error)
2021-05-21 10:31:49 +08:00
Remove() error
2021-05-20 17:32:35 +08:00
}
type MutableIterable interface {
Iterator() Iterator
MutableIterator() MutableIterator
}
func Loop(iterable Iterable, f func(element interface{}) error) error {
if f == nil {
2021-05-21 11:14:07 +08:00
return exceptions.NewNPE("", true)
2021-05-20 17:32:35 +08:00
}
iterator := iterable.Iterator()
for iterator.HasNext() {
2021-05-21 09:41:58 +08:00
next, err := iterator.Next()
if err != nil {
return err
}
err = f(next)
2021-05-20 17:32:35 +08:00
if err != nil {
return err
}
}
return nil
}
2021-05-21 10:31:49 +08:00
func LoopMutable(iterable MutableIterable, f func(element interface{}, iterator MutableIterator) (err error)) error {
2021-05-20 17:32:35 +08:00
if f == nil {
return nil
}
iterator := iterable.MutableIterator()
for iterator.HasNext() {
2021-05-21 09:41:58 +08:00
next, err := iterator.Next()
if err != nil {
return err
}
err = f(next, iterator)
2021-05-20 17:32:35 +08:00
if err != nil {
return err
}
}
return nil
}