streams

package
v0.0.0-...-018d782 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 30, 2024 License: Apache-2.0 Imports: 10 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GroupingBy

func GroupingBy[T any, K comparable, V any](ts []T, getKey func(t T) K, getVal func(t T) V) map[K][]V

GroupingBy 将集合ts根据key分组转换为map[K][]V, 根据getKey函数指定 “K类型” 的key,根据getVal函数指定 “V类型” 的value

func GroupingByIdentity

func GroupingByIdentity[T any, K comparable](ts []T, getKey func(t T) K) map[K][]T

GroupingByIdentity 将集合ts根据key分组转换为map[K][]T, 根据getKey函数指定 “K类型” 的key

func ToMap

func ToMap[T any, K comparable, V any](ts []T, getKey func(t T) K, getVal func(t T) V) map[K]V

ToMap 将集合ts转换为map[K]V, 根据getKey函数指定 “K类型” 的key,根据getVal函数指定 “V类型” 的value

func ToMapIdentity

func ToMapIdentity[T any, K comparable](ts []T, getKey func(t T) K) map[K]T

ToMapIdentity 将集合ts转换为map[K]T, 根据getKey函数指定 “K类型” 的key

Types

type ComparableStream

type ComparableStream[T comparable] interface {
	Stream[T]
}

ComparableStream 继承Stream接口,可以扩展comparable类型的 Stream

type Number

type Number interface {
	~int | ~int64 | ~float64
}

Number 类型约束 ~ 波浪号表示衍生类型,即使用 type 自定义的类型也可以被识别到(type MyInt int),底层类型一致即可

type NumberStream

type NumberStream[N Number] interface {
	OrderedStream[N]
	Sum() N
	Max() N
	Min() N
	Avg() float64
}

type OrderedStream

type OrderedStream[T cmp.Ordered] interface {
	ComparableStream[T]
}

OrderedStream 继承Stream接口,可以扩展cmp.Ordered类型的 Stream

type StrStream

type StrStream interface {
	OrderedStream[string]
}

StrStream 继承 OrderedStream 接口

type Stream

type Stream[T any] interface {

	// MapIdentity 将集合中T类型t转为一个新的T类型数据
	MapIdentity(convert func(t T) T) Stream[T]

	// Peek 执行eachDo函数,对t做操作会影响原始值,某种意义上来说和 MapIdentity 功能类似
	Peek(eachDo func(t *T)) Stream[T]

	// Filter 判断t是否需要过滤
	// filter 函数返回true表示保留t,返回false表示剔除t
	Filter(filter func(t T) bool) Stream[T]

	// Skip 跳过limit个元素
	Skip(limit int) Stream[T]

	// SkipIndex 从index下标开始,跳过limit个元素
	SkipIndex(index int, limit int) Stream[T]

	// Distinct 集合去重方法
	Distinct() Stream[T]

	// Sort 升序排序,如果是不可比较类型,会将T转为json字符串作为比较类型
	Sort() Stream[T]

	// SortFunc 可以取T中的某些属性进行排序
	// 调用示例:
	//
	//	slices.SortFunc(my.list, func(a, b T) int {
	//		return cmp.Or(
	//			cmp.Compare(a.Customer, b.Customer),
	//			cmp.Compare(a.Product, b.Product),
	//			cmp.Compare(b.Price, a.Price),
	//		)
	//	})
	SortFunc(cmp func(a, b T) int) Stream[T]

	// Reverse 将当前集合倒叙排序
	Reverse() Stream[T]

	// MapToInt 将T类型的Stream转为NumberStream[int]类型的Stream
	MapToInt(toIntFun func(t T) int) NumberStream[int]

	// MapToLong 将T类型的Stream转为NumberStream[int64]类型的Stream
	MapToLong(toLongFun func(t T) int64) NumberStream[int64]

	// MapToDouble 将T类型的Stream转为NumberStream[float64]类型的Stream
	MapToDouble(toDoubleFun func(t T) float64) NumberStream[float64]

	// MapToString 将T类型的Stream转为StrStream类型的Stream
	MapToString(toStrFun func(t T) string) StrStream

	// FindFirst 返回集合第一个元素的指针,空集合则返回nil
	FindFirst() *T

	// FindFirstOrElse 返回集合第一个元素,空集合则返回默认值ele
	// ele - T类型默认值
	FindFirstOrElse(ele T) T

	// FindFirstOrElseGet 返回集合第一个元素,空集合则执行get函数返回
	// get - 获取T类型默认值的函数
	FindFirstOrElseGet(get func() T) T

	// ToSlice 返回T类型的切片
	ToSlice() []T

	// ForEach 遍历集合,调用eachDo函数执行操作
	ForEach(eachDo func(t T))

	// Count 返回集合数量count
	Count() int

	// ToMapStrKey 将集合转换为map[string]any, 根据getKey函数指定 “string类型” 的key,根据getVal函数指定value
	// getKey - 根据t获取key的函数
	// getVal - 根据t获取value的函数
	ToMapStrKey(getKey func(t T) string, getVal func(t T) any) map[string]any

	// ToMapIntKey 将集合转换为map[int]any, 根据getKey函数指定 “int类型” 的key,根据getVal函数指定value
	// getKey - 根据t获取key的函数
	// getVal - 根据t获取value的函数
	ToMapIntKey(getKey func(t T) int, getVal func(t T) any) map[int]any

	// ToMapLongKey 将集合转换为map[int64]any, 根据getKey函数指定 “int64类型” 的key,根据getVal函数指定value
	// getKey - 根据t获取key的函数
	// getVal - 根据t获取value的函数
	ToMapLongKey(getKey func(t T) int64, getVal func(t T) any) map[int64]any

	// ToMapIdentityStrKey 将集合转换为map[string]T, 根据getKey函数指定 “string类型” 的key
	// getKey - 根据t获取key的函数
	ToMapIdentityStrKey(getKey func(t T) string) map[string]T

	// ToMapIdentityIntKey 将集合转换为map[int]T, 根据getKey函数指定 “int类型” 的key
	// getKey - 根据t获取key的函数
	ToMapIdentityIntKey(getKey func(t T) int) map[int]T

	// ToMapIdentityLongKey 将集合转换为map[int64]T, 根据getKey函数指定 “int64类型” 的key
	// getKey - 根据t获取key的函数
	ToMapIdentityLongKey(getKey func(t T) int64) map[int64]T

	// GroupingByIdentityStrKey 将集合根据key分组转换为map[string][]T, 根据getKey函数指定 “string类型” 的key
	// getKey - 根据t获取key的函数
	GroupingByIdentityStrKey(getKey func(t T) string) map[string][]T

	// GroupingByIdentityIntKey 将集合根据key分组转换为map[int][]T, 根据getKey函数指定 “int类型” 的key
	// getKey - 根据t获取key的函数
	GroupingByIdentityIntKey(getKey func(t T) int) map[int][]T

	// GroupingByIdentityLongKey 将集合根据key分组转换为map[int64][]T, 根据getKey函数指定 “int64类型” 的key
	// getKey - 根据t获取key的函数
	GroupingByIdentityLongKey(getKey func(t T) int64) map[int64][]T

	// AnyMatch 遍历集合,任意一个元素使得predicate函数返回true, 则返回true
	// 即:predicate(a) || predicate(b) ...
	AnyMatch(predicate func(t T) bool) bool

	// AllMatch 遍历集合,所有元素使得predicate函数返回true, 则返回true
	// 即:predicate(a) && predicate(b) ...
	AllMatch(predicate func(t T) bool) bool

	// NoneMatch 遍历集合,所有元素使得predicate函数返回false, 则返回true
	// 即:!(predicate(a) || predicate(b) ...)
	NoneMatch(predicate func(t T) bool) bool

	// Join 根据delimiter分隔符将集合中的所有元素拼接成一个字符串返回
	Join(delimiter string) string

	// Join2 根据delimiter分隔符将集合中的所有元素拼接成一个字符串,然后拼接一个prefix前缀和一个suffix后缀返回
	Join2(delimiter, prefix, suffix string) string
}

Stream 定义 Stream[T] 接口

func Map

func Map[T any, R any](ts []T, t2r func(t T) R) Stream[R]

Map 函数,将T类型的切片,转换为R类型的Stream对象

func MapStream

func MapStream[T any, R any](st Stream[T], t2r func(t T) R) Stream[R]

MapStream 函数,将T类型的Stream对象,转换为R类型的Stream对象

func Of

func Of[T any](ele ...T) Stream[T]

Of 将T类型切片转化为T类型的Stream对象,支持单个传入

func OfSlice

func OfSlice[T any](list []T) Stream[T]

OfSlice 将T类型切片转化为T类型的Stream对象

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL