Categorygithub.com/chyroc/go-lambda
repositorypackage
0.8.0
Repository: https://github.com/chyroc/go-lambda.git
Documentation: pkg.go.dev

# README

go-lambda

codecov go report card test status Apache-2.0 license Go.Dev reference Go project version

Process data like functional programming

Install

go get github.com/chyroc/go-lambda

Usage

A simple example

func ExampleNew() {
	obj := lambda.New([]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9})

	obj = obj.FilterList(func(idx int, obj interface{}) bool {
		return obj.(int)%2 == 0
	})
	fmt.Println(obj.ToIntSlice())

	obj = obj.Chunk(3)
	fmt.Println(obj.ToExpectType([][]int{}))

	obj = obj.Flatten()
	fmt.Println(obj.ToIntSlice())

	obj = obj.Compact()
	fmt.Println(obj.ToIntSlice())

	obj = obj.MapList(func(idx int, obj interface{}) interface{} {
		return exampleItem{Name: fmt.Sprintf("name-%d", obj.(int))}
	})
	fmt.Println(obj.ToExpectType([]exampleItem{}))

	// output:
	// [0 2 4 6 8] <nil>
	// [[0 2 4] [6 8]] <nil>
	// [0 2 4 6 8] <nil>
	// [2 4 6 8] <nil>
	// [{name-2} {name-4} {name-6} {name-8}] <nil>
}

Chunk

func ExampleObject_Chunk() {
	// Split the list into shorter length lists
	res, err := lambda.New([]int{1, 2, 3, 4, 5}).Chunk(2).ToIntListList()
	fmt.Println("err:", err)
	fmt.Println("res:", res)
	// output:
	// err: <nil>
	// res: [[1 2] [3 4] [5]]
}

Compact

func ExampleObject_Compact() {
	// Remove 0-valued elements from the list
	res, err := lambda.New([]int{0, 1, 2, 1, 0, 2}).Compact().ToIntSlice()
	fmt.Println("err:", err)
	fmt.Println("res:", res)
	// output:
	// err: <nil>
	// res: [1 2 1 2]
}

Flatten

func ExampleObject_Flatten() {
	// Flatten the list
	res, err := lambda.New([][]int{{1, 2}, {2, 3}, {4}}).Flatten().ToIntSlice()
	fmt.Println("err:", err)
	fmt.Println("res:", res)
	// output:
	// err: <nil>
	// res: [1 2 2 3 4]
}

Reverse

func ExampleObject_Reverse() {
	// Reverse list
	res, err := lambda.New([]int{1, 2, 3, 4}).Reverse().ToIntSlice()
	fmt.Println("err:", err)
	fmt.Println("res:", res)
	// output:
	// err: <nil>
	// res: [4 3 2 1]
}

Uniq

func ExampleObject_Uniq() {
	// Remove duplicate elements in the list
	res, err := lambda.New([]int{1, 2, 1, 3, 2, 3, 4}).Uniq().ToIntSlice()
	fmt.Println("err:", err)
	fmt.Println("res:", res)
	// output:
	// err: <nil>
	// res: [1 2 3 4]
}

MapArray

func ExampleObject_MapList() {
	// Traverse the elements of the list, and after each element is processed, the returned elements form a new list
	res, err := lambda.New([]int{1, 2, 3}).MapArray(func(idx int, obj interface{}) interface{} {
		return obj.(int) + 1
	}).ToIntSlice()
	fmt.Println("err:", err)
	fmt.Println("res:", res)
	// output:
	// err: <nil>
	// res: [2 3 4]
}

FilterArray

func ExampleObject_FilterList() {
	// Traverse the elements of the list, each element is added to a new list or not, and a new list is returned
	res, err := lambda.New([]int{1, 2, 3, 4}).FilterArray(func(idx int, obj interface{}) bool {
		return obj.(int)%2 == 0
	}).ToIntSlice()
	fmt.Println("err:", err)
	fmt.Println("res:", res)
	// output:
	// err: <nil>
	// res: [2 4]
}