{"id":25184598,"url":"https://github.com/xuender/go-stream","last_synced_at":"2025-04-04T08:40:37.181Z","repository":{"id":57513306,"uuid":"154012387","full_name":"xuender/go-stream","owner":"xuender","description":"Stream Collections for Go. Inspired in Java 8 Streams","archived":false,"fork":false,"pushed_at":"2023-08-14T01:42:35.000Z","size":129,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-09T19:40:54.417Z","etag":null,"topics":["go","go-stream","golang","stream","stream-api"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xuender.png","metadata":{"files":{"readme":"README.md","changelog":"History.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-21T13:39:56.000Z","updated_at":"2023-07-31T05:07:04.000Z","dependencies_parsed_at":"2024-06-20T12:00:24.180Z","dependency_job_id":"b1572a45-298a-487e-804f-2f8ede662008","html_url":"https://github.com/xuender/go-stream","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuender%2Fgo-stream","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuender%2Fgo-stream/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuender%2Fgo-stream/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuender%2Fgo-stream/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xuender","download_url":"https://codeload.github.com/xuender/go-stream/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247148980,"owners_count":20891948,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","go-stream","golang","stream","stream-api"],"created_at":"2025-02-09T19:33:19.601Z","updated_at":"2025-04-04T08:40:37.154Z","avatar_url":"https://github.com/xuender.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go-stream\n\n[![GoCI][action-svg]][action-url]\n[![Go Report Card][goreport-svg]][goreport-url]\n[![codecov][codecov-svg]][codecov-url]\n[![GoDoc][godoc-svg]][godoc-url]\n[![GitHub license][license-svg]][license-url]\n[![GitHub issues][issues-svg]][issues-url]\n[![GitHub stars][stars-svg]][stars-url]\n\nStream Collections for Go. Inspired in Java 8 Streams.\n\nUse channel and Go1.18+ generic support.\n\n✨ **`xuender/go-stream` is a Java 8 Streams style Go library based on Go 1.18+ Generics.**\n\n## 🚀 Install\n\nTo install the library and command line program:\n\n```shell\ngo get -u github.com/xuender/go-stream@latest\n```\n\n## 💡 Usage\n\nYou can import `stream` using:\n\n```go\nimport \"github.com/xuender/go-stream\"\n```\n\n### NewBase\n\nNew BaseStream.\n\n```go\npackage main\n\nimport (\n  \"fmt\"\n\n  \"github.com/xuender/go-stream\"\n)\n\nfunc main() {\n  base := stream.NewBase(stream.Range2Channel(5)).\n    Peek(func(num int) { fmt.Println(\"peek1:\", num) }).\n    Filter(func(num int) bool { return num \u003e 2 }).\n    Peek(func(num int) { fmt.Println(\"peek2:\", num) })\n\n  fmt.Println(base.Count())\n}\n```\n\nOutput:\n\n```shell\npeek1: 0\npeek1: 1\npeek1: 2\npeek1: 3\npeek1: 4\npeek2: 3\npeek2: 4\n2\n```\n\n[[play](https://go.dev/play/p/LxULGyhWCi7)]\n\n### Parallel\n\nBaseStream to ParallelStream.\n\n```go\npackage main\n\nimport (\n  \"fmt\"\n  \"math/rand\"\n  \"time\"\n\n  \"github.com/xuender/go-stream\"\n)\n\nfunc main() {\n  stream.NewBase(stream.Range2Channel(1000)).\n    Parallel(100).\n    Filter(func(num int) bool { return num%7 == 0 }).\n    ForEach(func(num int) {\n      dur := time.Duration(rand.Intn(1000)) * time.Millisecond\n\n      time.Sleep(dur)\n      fmt.Printf(\"%d\\t%s\\n\", num, dur)\n    })\n}\n```\n\nOutput:\n\n```shell\n623     2ms\n497     2ms\n273     15ms\n252     26ms\n616     33ms\n756     10ms\n91      47ms\n7       59ms\n21      59ms\n602     59ms\n350     78ms\n28      81ms\n...\n```\n\n[[play](https://go.dev/play/p/S23mcPB_URv)]\n\n### Map\n\nInteger to string.\n\n```go\npackage main\n\nimport (\n  \"fmt\"\n\n  \"github.com/xuender/go-stream\"\n)\n\nfunc main() {\n  base := stream.Map(\n    stream.Range2Channel(100),\n    func(num int) string { return fmt.Sprintf(\"[%d]\", num) },\n  ).Limit(3)\n\n  for i := range base.C {\n    fmt.Println(i)\n  }\n}\n```\n\nOutput:\n\n```shell\n[0]\n[1]\n[2]\n```\n\n[[play](https://go.dev/play/p/5QlT-D-Cv3V)]\n\n### FlatMap\n\n```go\npackage main\n\nimport (\n  \"fmt\"\n\n  \"github.com/xuender/go-stream\"\n)\n\nfunc main() {\n  stream.FlatMap(\n    stream.Slice2Channel([]int{0, 0}, []int{1, 2}, []int{2, 4}),\n    func(num int) string { return fmt.Sprintf(\"[%d]\", num) },\n  ).ForEach(func(str string) {\n    fmt.Println(str)\n  })\n}\n```\n\nOutput:\n\n```shell\n[0]\n[0]\n[1]\n[2]\n[2]\n[4]\n```\n\n[[play](https://go.dev/play/p/HXeeZOOkD2y)]\n\n### Sorted\n\nOrderedStream sorted.\n\n```go\npackage main\n\nimport (\n  \"fmt\"\n\n  \"github.com/xuender/go-stream\"\n)\n\nfunc main() {\n  stream.NewOrdered(stream.Slice2Channel(3, 2, 7, 1)).\n    Sorted().\n    ForEach(func(num int) {\n      fmt.Println(num)\n    })\n}\n```\n\nOutput:\n\n```shell\n1\n2\n3\n7\n```\n\n[[play](https://go.dev/play/p/mSrDBfV_-d1)]\n\n## 🛩 Functions\n\n| Function | Type | State |\n| - | - | - |\n| AnyMatch | Terminal operations, short-circuiting | √ |\n| AllMatch | Terminal operations, short-circuiting | √ |\n| Count | Terminal operations | √ |\n| Filter | Intermediate operations, Parallel | √ |\n| FindFirst | Terminal operations, short-circuiting | √ |\n| ForEach | Terminal operations, Parallel | √ |\n| Limit | Intermediate operations | √ |\n| NoneMatch | Terminal operations, short-circuiting | √ |\n| Parallel | Intermediate operations | √ |\n| Peek | Intermediate operations, Parallel | √ |\n| Skip | Intermediate operations | √ |\n| Sort | Intermediate operations | √ |\n| Distinct | Intermediate operations, Comparable | √ |\n| Max | Terminal operations, Ordered | √ |\n| Min | Terminal operations, Ordered | √ |\n| Reduce | Terminal operations, Ordered | √ |\n| Sorted | Intermediate operations, Ordered | √ |\n| Sequential | Intermediate operations, Parallel | √ |\n| Map | Function | √ |\n| FlatMap | Function | √ |\n\n## 📝 License\n\n© ender, 2023~time.Now\n\n[MIT LICENSE](https://github.com/xuender/go-stream/blob/master/LICENSE)\n\n[action-url]: https://github.com/xuender/go-stream/actions\n[action-svg]: https://github.com/xuender/go-stream/workflows/Go/badge.svg\n\n[goreport-url]: https://goreportcard.com/report/github.com/xuender/go-stream\n[goreport-svg]: https://goreportcard.com/badge/github.com/xuender/go-stream\n\n[codecov-url]: https://codecov.io/gh/xuender/go-stream\n[codecov-svg]: https://codecov.io/gh/xuender/go-stream/branch/master/graph/badge.svg?token=KCNTIM7DLH\n\n[godoc-url]: https://pkg.go.dev/github.com/xuender/go-stream\n[godoc-svg]: https://godoc.org/github.com/xuender/go-stream?status.svg\n\n[license-url]: https://github.com/xuender/go-stream/blob/main/LICENSE\n[license-svg]: https://img.shields.io/github/license/xuender/go-stream\n\n[issues-url]: https://github.com/xuender/go-stream/issues\n[issues-svg]: https://img.shields.io/github/issues/xuender/go-stream\n\n[stars-url]: https://github.com/xuender/gostream/stargazers\n[stars-svg]: https://img.shields.io/github/stars/xuender/go-stream\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxuender%2Fgo-stream","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxuender%2Fgo-stream","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxuender%2Fgo-stream/lists"}