feat: stream 新增 Maps,以及快捷开启流操作的函数 With...
This commit is contained in:
parent
fc6c960a59
commit
cb3bd11248
|
@ -4,6 +4,11 @@ import (
|
|||
"github.com/kercylan98/minotaur/utils/hash"
|
||||
)
|
||||
|
||||
// WithMap 将映射转换为流
|
||||
func WithMap[K comparable, V any](m map[K]V) Map[K, V] {
|
||||
return m
|
||||
}
|
||||
|
||||
type Map[K comparable, V any] map[K]V
|
||||
|
||||
// Map 返回映射
|
||||
|
@ -60,7 +65,7 @@ func (slf Map[K, V]) FilterFCopy(expression func(key K, value V) bool) Map[K, V]
|
|||
}
|
||||
|
||||
// Chunk 是 hash.Chunk 的快捷方式
|
||||
func (slf Map[K, V]) Chunk(size int) Slice[Map[K, V]] {
|
||||
func (slf Map[K, V]) Chunk(size int) Maps[K, V] {
|
||||
chunks := hash.Chunk(slf, size)
|
||||
var res = make([]Map[K, V], 0, len(chunks))
|
||||
for i := range chunks {
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
package stream_test
|
||||
|
||||
import (
|
||||
"github.com/kercylan98/minotaur/utils/stream"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestMap_Chunk(t *testing.T) {
|
||||
var m = map[string]int{
|
||||
"a": 1,
|
||||
"b": 2,
|
||||
}
|
||||
t.Log(stream.WithMap(m).Chunk(1).Merge())
|
||||
}
|
|
@ -0,0 +1,166 @@
|
|||
package stream
|
||||
|
||||
import "github.com/kercylan98/minotaur/utils/slice"
|
||||
|
||||
// WithMaps 将多个 map 转换为流
|
||||
func WithMaps[K comparable, V any](maps ...map[K]V) Maps[K, V] {
|
||||
var ms = make(Maps[K, V], len(maps))
|
||||
for i, m := range maps {
|
||||
ms[i] = m
|
||||
}
|
||||
return ms
|
||||
}
|
||||
|
||||
// WithStreamMaps 将多个 map 转换为流
|
||||
func WithStreamMaps[K comparable, V any](maps ...Map[K, V]) Maps[K, V] {
|
||||
var ms = make(Maps[K, V], len(maps))
|
||||
for i, m := range maps {
|
||||
ms[i] = m
|
||||
}
|
||||
return ms
|
||||
}
|
||||
|
||||
type Maps[K comparable, V any] []Map[K, V]
|
||||
|
||||
// Merge 将多个 map 合并为一个 map,返回该 map 的流
|
||||
// - 当多个 map 中存在相同 key 的元素时,将会发生随机覆盖
|
||||
func (slf Maps[K, V]) Merge() Map[K, V] {
|
||||
var m = make(map[K]V)
|
||||
for _, stream := range slf {
|
||||
for k, v := range stream {
|
||||
m[k] = v
|
||||
}
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// Drop 是 slice.Drop 的快捷方式
|
||||
func (slf Maps[K, V]) Drop(start, n int) Maps[K, V] {
|
||||
return slice.Drop(start, n, slf)
|
||||
}
|
||||
|
||||
// DropBy 是 slice.DropBy 的快捷方式
|
||||
func (slf Maps[K, V]) DropBy(fn func(index int, value Map[K, V]) bool) Maps[K, V] {
|
||||
return slice.DropBy(slf, fn)
|
||||
}
|
||||
|
||||
// Each 是 slice.Each 的快捷方式
|
||||
func (slf Maps[K, V]) Each(abort bool, iterator func(index int, item Map[K, V]) bool) Maps[K, V] {
|
||||
slice.Each(abort, slf, iterator)
|
||||
return slf
|
||||
}
|
||||
|
||||
// EachT 是 slice.EachT 的快捷方式
|
||||
func (slf Maps[K, V]) EachT(iterator func(index int, item Map[K, V]) bool) Maps[K, V] {
|
||||
slice.EachT(slf, iterator)
|
||||
return slf
|
||||
}
|
||||
|
||||
// EachF 是 slice.EachF 的快捷方式
|
||||
func (slf Maps[K, V]) EachF(iterator func(index int, item Map[K, V]) bool) Maps[K, V] {
|
||||
slice.EachF(slf, iterator)
|
||||
return slf
|
||||
}
|
||||
|
||||
// EachReverse 是 slice.EachReverse 的快捷方式
|
||||
func (slf Maps[K, V]) EachReverse(abort bool, iterator func(index int, item Map[K, V]) bool) Maps[K, V] {
|
||||
slice.EachReverse(abort, slf, iterator)
|
||||
return slf
|
||||
}
|
||||
|
||||
// EachReverseT 是 slice.EachReverseT 的快捷方式
|
||||
func (slf Maps[K, V]) EachReverseT(iterator func(index int, item Map[K, V]) bool) Maps[K, V] {
|
||||
slice.EachReverseT(slf, iterator)
|
||||
return slf
|
||||
}
|
||||
|
||||
// EachReverseF 是 slice.EachReverseF 的快捷方式
|
||||
func (slf Maps[K, V]) EachReverseF(iterator func(index int, item Map[K, V]) bool) Maps[K, V] {
|
||||
slice.EachReverseF(slf, iterator)
|
||||
return slf
|
||||
}
|
||||
|
||||
// FillBy 是 slice.FillBy 的快捷方式
|
||||
func (slf Maps[K, V]) FillBy(fn func(index int, value Map[K, V]) Map[K, V]) Maps[K, V] {
|
||||
return slice.FillBy(slf, fn)
|
||||
}
|
||||
|
||||
// FillByCopy 是 slice.FillByCopy 的快捷方式
|
||||
func (slf Maps[K, V]) FillByCopy(fn func(index int, value Map[K, V]) Map[K, V]) Maps[K, V] {
|
||||
return slice.FillByCopy(slf, fn)
|
||||
}
|
||||
|
||||
// FillUntil 是 slice.FillUntil 的快捷方式
|
||||
func (slf Maps[K, V]) FillUntil(abort bool, fn func(index int, value Map[K, V]) (Map[K, V], bool)) Maps[K, V] {
|
||||
return slice.FillUntil(abort, slf, fn)
|
||||
}
|
||||
|
||||
// FillUntilCopy 是 slice.FillUntilCopy 的快捷方式
|
||||
func (slf Maps[K, V]) FillUntilCopy(abort bool, fn func(index int, value Map[K, V]) (Map[K, V], bool)) Maps[K, V] {
|
||||
return slice.FillUntilCopy(abort, slf, fn)
|
||||
}
|
||||
|
||||
// FillUntilT 是 slice.FillUntilT 的快捷方式
|
||||
func (slf Maps[K, V]) FillUntilT(fn func(index int, value Map[K, V]) (Map[K, V], bool)) Maps[K, V] {
|
||||
return slice.FillUntilT(slf, fn)
|
||||
}
|
||||
|
||||
// FillUntilF 是 slice.FillUntilF 的快捷方式
|
||||
func (slf Maps[K, V]) FillUntilF(fn func(index int, value Map[K, V]) (Map[K, V], bool)) Maps[K, V] {
|
||||
return slice.FillUntilF(slf, fn)
|
||||
}
|
||||
|
||||
// FillUntilTCopy 是 slice.FillUntilTCopy 的快捷方式
|
||||
func (slf Maps[K, V]) FillUntilTCopy(fn func(index int, value Map[K, V]) (Map[K, V], bool)) Maps[K, V] {
|
||||
return slice.FillUntilTCopy(slf, fn)
|
||||
}
|
||||
|
||||
// FillUntilFCopy 是 slice.FillUntilFCopy 的快捷方式
|
||||
func (slf Maps[K, V]) FillUntilFCopy(fn func(index int, value Map[K, V]) (Map[K, V], bool)) Maps[K, V] {
|
||||
return slice.FillUntilFCopy(slf, fn)
|
||||
}
|
||||
|
||||
// Filter 是 slice.Filter 的快捷方式
|
||||
func (slf Maps[K, V]) Filter(reserve bool, expression func(index int, item Map[K, V]) bool) Maps[K, V] {
|
||||
return slice.Filter(reserve, slf, expression)
|
||||
}
|
||||
|
||||
// FilterT 是 slice.FilterT 的快捷方式
|
||||
func (slf Maps[K, V]) FilterT(expression func(index int, item Map[K, V]) bool) Maps[K, V] {
|
||||
return slice.FilterT(slf, expression)
|
||||
}
|
||||
|
||||
// FilterF 是 slice.FilterF 的快捷方式
|
||||
func (slf Maps[K, V]) FilterF(expression func(index int, item Map[K, V]) bool) Maps[K, V] {
|
||||
return slice.FilterF(slf, expression)
|
||||
}
|
||||
|
||||
// FilterCopy 是 slice.FilterCopy 的快捷方式
|
||||
func (slf Maps[K, V]) FilterCopy(reserve bool, expression func(index int, item Map[K, V]) bool) Maps[K, V] {
|
||||
return slice.FilterCopy(reserve, slf, expression)
|
||||
}
|
||||
|
||||
// FilterTCopy 是 slice.FilterTCopy 的快捷方式
|
||||
func (slf Maps[K, V]) FilterTCopy(expression func(index int, item Map[K, V]) bool) Maps[K, V] {
|
||||
return slice.FilterTCopy(slf, expression)
|
||||
}
|
||||
|
||||
// FilterFCopy 是 slice.FilterFCopy 的快捷方式
|
||||
func (slf Maps[K, V]) FilterFCopy(expression func(index int, item Map[K, V]) bool) Maps[K, V] {
|
||||
return slice.FilterFCopy(slf, expression)
|
||||
}
|
||||
|
||||
// Shuffle 是 slice.Shuffle 的快捷方式
|
||||
func (slf Maps[K, V]) Shuffle() Maps[K, V] {
|
||||
return slice.Shuffle(slf)
|
||||
}
|
||||
|
||||
// ShuffleCopy 是 slice.ShuffleCopy 的快捷方式
|
||||
func (slf Maps[K, V]) ShuffleCopy() Maps[K, V] {
|
||||
return slice.ShuffleCopy(slf)
|
||||
}
|
||||
|
||||
// UniqueBy 是 slice.UniqueBy 的快捷方式
|
||||
func (slf Maps[K, V]) UniqueBy(fn func(Map[K, V]) any) Maps[K, V] {
|
||||
return slice.UniqueBy(slf, fn)
|
||||
}
|
|
@ -2,6 +2,11 @@ package stream
|
|||
|
||||
import "github.com/kercylan98/minotaur/utils/slice"
|
||||
|
||||
// WithSlice 将切片转换为流
|
||||
func WithSlice[V any](slice []V) Slice[V] {
|
||||
return slice
|
||||
}
|
||||
|
||||
type Slice[V any] []V
|
||||
|
||||
// Slice 返回切片
|
||||
|
|
|
@ -2,6 +2,24 @@ package stream
|
|||
|
||||
import "github.com/kercylan98/minotaur/utils/slice"
|
||||
|
||||
// WithSlices 将多个切片转换为流
|
||||
func WithSlices[V any](slices ...[]V) Slices[V] {
|
||||
var ss = make(Slices[V], len(slices))
|
||||
for i, s := range slices {
|
||||
ss[i] = s
|
||||
}
|
||||
return ss
|
||||
}
|
||||
|
||||
// WithStreamSlices 将多个切片转换为流
|
||||
func WithStreamSlices[V any](slices ...Slice[V]) Slices[V] {
|
||||
var ss = make(Slices[V], len(slices))
|
||||
for i, s := range slices {
|
||||
ss[i] = s
|
||||
}
|
||||
return ss
|
||||
}
|
||||
|
||||
type Slices[V any] []Slice[V]
|
||||
|
||||
// Merge 合并为一个切片
|
||||
|
@ -13,133 +31,133 @@ func (slf Slices[V]) Merge() Slice[V] {
|
|||
return s
|
||||
}
|
||||
|
||||
// Drop 的快捷方式
|
||||
// Drop 是 slice.Drop 的快捷方式
|
||||
func (slf Slices[V]) Drop(start, n int) Slices[V] {
|
||||
return slice.Drop(start, n, slf)
|
||||
}
|
||||
|
||||
// DropBy 的快捷方式
|
||||
// DropBy 是 slice.DropBy 的快捷方式
|
||||
func (slf Slices[V]) DropBy(fn func(index int, value Slice[V]) bool) Slices[V] {
|
||||
return slice.DropBy(slf, fn)
|
||||
}
|
||||
|
||||
// Each 的快捷方式
|
||||
// Each 是 slice.Each 的快捷方式
|
||||
func (slf Slices[V]) Each(abort bool, iterator func(index int, item Slice[V]) bool) Slices[V] {
|
||||
slice.Each(abort, slf, iterator)
|
||||
return slf
|
||||
}
|
||||
|
||||
// EachT 的快捷方式
|
||||
// EachT 是 slice.EachT 的快捷方式
|
||||
func (slf Slices[V]) EachT(iterator func(index int, item Slice[V]) bool) Slices[V] {
|
||||
slice.EachT(slf, iterator)
|
||||
return slf
|
||||
}
|
||||
|
||||
// EachF 的快捷方式
|
||||
// EachF 是 slice.EachF 的快捷方式
|
||||
func (slf Slices[V]) EachF(iterator func(index int, item Slice[V]) bool) Slices[V] {
|
||||
slice.EachF(slf, iterator)
|
||||
return slf
|
||||
}
|
||||
|
||||
// EachReverse 的快捷方式
|
||||
// EachReverse 是 slice.EachReverse 的快捷方式
|
||||
func (slf Slices[V]) EachReverse(abort bool, iterator func(index int, item Slice[V]) bool) Slices[V] {
|
||||
slice.EachReverse(abort, slf, iterator)
|
||||
return slf
|
||||
}
|
||||
|
||||
// EachReverseT 的快捷方式
|
||||
// EachReverseT 是 slice.EachReverseT 的快捷方式
|
||||
func (slf Slices[V]) EachReverseT(iterator func(index int, item Slice[V]) bool) Slices[V] {
|
||||
slice.EachReverseT(slf, iterator)
|
||||
return slf
|
||||
}
|
||||
|
||||
// EachReverseF 的快捷方式
|
||||
// EachReverseF 是 slice.EachReverseF 的快捷方式
|
||||
func (slf Slices[V]) EachReverseF(iterator func(index int, item Slice[V]) bool) Slices[V] {
|
||||
slice.EachReverseF(slf, iterator)
|
||||
return slf
|
||||
}
|
||||
|
||||
// FillBy 的快捷方式
|
||||
// FillBy 是 slice.FillBy 的快捷方式
|
||||
func (slf Slices[V]) FillBy(fn func(index int, value Slice[V]) Slice[V]) Slices[V] {
|
||||
return slice.FillBy(slf, fn)
|
||||
}
|
||||
|
||||
// FillByCopy 的快捷方式
|
||||
// FillByCopy 是 slice.FillByCopy 的快捷方式
|
||||
func (slf Slices[V]) FillByCopy(fn func(index int, value Slice[V]) Slice[V]) Slices[V] {
|
||||
return slice.FillByCopy(slf, fn)
|
||||
}
|
||||
|
||||
// FillUntil 的快捷方式
|
||||
// FillUntil 是 slice.FillUntil 的快捷方式
|
||||
func (slf Slices[V]) FillUntil(abort bool, fn func(index int, value Slice[V]) (Slice[V], bool)) Slices[V] {
|
||||
return slice.FillUntil(abort, slf, fn)
|
||||
}
|
||||
|
||||
// FillUntilCopy 的快捷方式
|
||||
// FillUntilCopy 是 slice.FillUntilCopy 的快捷方式
|
||||
func (slf Slices[V]) FillUntilCopy(abort bool, fn func(index int, value Slice[V]) (Slice[V], bool)) Slices[V] {
|
||||
return slice.FillUntilCopy(abort, slf, fn)
|
||||
}
|
||||
|
||||
// FillUntilT 的快捷方式
|
||||
// FillUntilT 是 slice.FillUntilT 的快捷方式
|
||||
func (slf Slices[V]) FillUntilT(fn func(index int, value Slice[V]) (Slice[V], bool)) Slices[V] {
|
||||
return slice.FillUntilT(slf, fn)
|
||||
}
|
||||
|
||||
// FillUntilF 的快捷方式
|
||||
// FillUntilF 是 slice.FillUntilF 的快捷方式
|
||||
func (slf Slices[V]) FillUntilF(fn func(index int, value Slice[V]) (Slice[V], bool)) Slices[V] {
|
||||
return slice.FillUntilF(slf, fn)
|
||||
}
|
||||
|
||||
// FillUntilTCopy 的快捷方式
|
||||
// FillUntilTCopy 是 slice.FillUntilTCopy 的快捷方式
|
||||
func (slf Slices[V]) FillUntilTCopy(fn func(index int, value Slice[V]) (Slice[V], bool)) Slices[V] {
|
||||
return slice.FillUntilTCopy(slf, fn)
|
||||
}
|
||||
|
||||
// FillUntilFCopy 的快捷方式
|
||||
// FillUntilFCopy 是 slice.FillUntilFCopy 的快捷方式
|
||||
func (slf Slices[V]) FillUntilFCopy(fn func(index int, value Slice[V]) (Slice[V], bool)) Slices[V] {
|
||||
return slice.FillUntilFCopy(slf, fn)
|
||||
}
|
||||
|
||||
// Filter 的快捷方式
|
||||
// Filter 是 slice.Filter 的快捷方式
|
||||
func (slf Slices[V]) Filter(reserve bool, expression func(index int, item Slice[V]) bool) Slices[V] {
|
||||
return slice.Filter(reserve, slf, expression)
|
||||
}
|
||||
|
||||
// FilterT 的快捷方式
|
||||
// FilterT 是 slice.FilterT 的快捷方式
|
||||
func (slf Slices[V]) FilterT(expression func(index int, item Slice[V]) bool) Slices[V] {
|
||||
return slice.FilterT(slf, expression)
|
||||
}
|
||||
|
||||
// FilterF 的快捷方式
|
||||
// FilterF 是 slice.FilterF 的快捷方式
|
||||
func (slf Slices[V]) FilterF(expression func(index int, item Slice[V]) bool) Slices[V] {
|
||||
return slice.FilterF(slf, expression)
|
||||
}
|
||||
|
||||
// FilterCopy 的快捷方式
|
||||
// FilterCopy 是 slice.FilterCopy 的快捷方式
|
||||
func (slf Slices[V]) FilterCopy(reserve bool, expression func(index int, item Slice[V]) bool) Slices[V] {
|
||||
return slice.FilterCopy(reserve, slf, expression)
|
||||
}
|
||||
|
||||
// FilterTCopy 的快捷方式
|
||||
// FilterTCopy 是 slice.FilterTCopy 的快捷方式
|
||||
func (slf Slices[V]) FilterTCopy(expression func(index int, item Slice[V]) bool) Slices[V] {
|
||||
return slice.FilterTCopy(slf, expression)
|
||||
}
|
||||
|
||||
// FilterFCopy 的快捷方式
|
||||
// FilterFCopy 是 slice.FilterFCopy 的快捷方式
|
||||
func (slf Slices[V]) FilterFCopy(expression func(index int, item Slice[V]) bool) Slices[V] {
|
||||
return slice.FilterFCopy(slf, expression)
|
||||
}
|
||||
|
||||
// Shuffle 的快捷方式
|
||||
// Shuffle 是 slice.Shuffle 的快捷方式
|
||||
func (slf Slices[V]) Shuffle() Slices[V] {
|
||||
return slice.Shuffle(slf)
|
||||
}
|
||||
|
||||
// ShuffleCopy 的快捷方式
|
||||
// ShuffleCopy 是 slice.ShuffleCopy 的快捷方式
|
||||
func (slf Slices[V]) ShuffleCopy() Slices[V] {
|
||||
return slice.ShuffleCopy(slf)
|
||||
}
|
||||
|
||||
// UniqueBy 的快捷方式
|
||||
// UniqueBy 是 slice.UniqueBy 的快捷方式
|
||||
func (slf Slices[V]) UniqueBy(fn func(Slice[V]) any) Slices[V] {
|
||||
return slice.UniqueBy(slf, fn)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue