{"id":8977,"date":"2024-10-21T13:31:16","date_gmt":"2024-10-21T12:31:16","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=8977"},"modified":"2025-05-22T11:32:39","modified_gmt":"2025-05-22T10:32:39","slug":"go-iteratorwrapper","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/go-iteratorwrapper\/","title":{"rendered":"Go IteratorWrapper"},"content":{"rendered":"\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"golang\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">package main\n\nimport (\n\t\"fmt\"\n\t\"math\"\n)\n\ntype IteratorWrapper[T any] struct {\n\titer []T\n}\n\nfunc From[T any](iterable []T) *IteratorWrapper[T] {\n\treturn &amp;IteratorWrapper[T]{iter: iterable}\n}\n\nfunc (iw *IteratorWrapper[T]) MapTo[U any](f func(T) U) *IteratorWrapper[U] {\n\tresult := make([]U, len(iw.iter))\n\tfor i, x := range iw.iter {\n\t\tresult[i] = f(x)\n\t}\n\treturn From(result)\n}\n\nfunc (iw *IteratorWrapper[T]) Filter(f func(T) bool) *IteratorWrapper[T] {\n\tvar result []T\n\tfor _, x := range iw.iter {\n\t\tif f(x) {\n\t\t\tresult = append(result, x)\n\t\t}\n\t}\n\treturn From(result)\n}\n\nfunc (iw *IteratorWrapper[T]) Take(n int) *IteratorWrapper[T] {\n\tif n > len(iw.iter) {\n\t\tn = len(iw.iter)\n\t}\n\treturn From(iw.iter[:n])\n}\n\nfunc (iw *IteratorWrapper[T]) Skip(n int) *IteratorWrapper[T] {\n\tif n > len(iw.iter) {\n\t\tn = len(iw.iter)\n\t}\n\treturn From(iw.iter[n:])\n}\n\nfunc (iw *IteratorWrapper[T]) ToArray() []T {\n\treturn iw.iter\n}\n\nfunc (iw *IteratorWrapper[T]) First() (T, bool) {\n\tif len(iw.iter) == 0 {\n\t\tvar zero T\n\t\treturn zero, false\n\t}\n\treturn iw.iter[0], true\n}\n\nfunc (iw *IteratorWrapper[T]) Last() (T, bool) {\n\tif len(iw.iter) == 0 {\n\t\tvar zero T\n\t\treturn zero, false\n\t}\n\treturn iw.iter[len(iw.iter)-1], true\n}\n\nfunc (iw *IteratorWrapper[T]) Sum(f func(T) float64) float64 {\n\tvar total float64\n\tfor _, x := range iw.iter {\n\t\ttotal += f(x)\n\t}\n\treturn total\n}\n\nfunc (iw *IteratorWrapper[T]) Min(f func(T) float64) (float64, bool) {\n\tif len(iw.iter) == 0 {\n\t\treturn 0, false\n\t}\n\tmin := f(iw.iter[0])\n\tfor _, x := range iw.iter[1:] {\n\t\tval := f(x)\n\t\tif val &lt; min {\n\t\t\tmin = val\n\t\t}\n\t}\n\treturn min, true\n}\n\nfunc (iw *IteratorWrapper[T]) Max(f func(T) float64) (float64, bool) {\n\tif len(iw.iter) == 0 {\n\t\treturn 0, false\n\t}\n\tmax := f(iw.iter[0])\n\tfor _, x := range iw.iter[1:] {\n\t\tval := f(x)\n\t\tif val > max {\n\t\t\tmax = val\n\t\t}\n\t}\n\treturn max, true\n}\n<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"golang\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">func main() {\n\tnumbers := []int{1, 2, 3, 4, 5}\n\n\tresult := From(numbers).\n\t\tMap(func(x int) int { return x * 2 }).\n\t\tFilter(func(x int) bool { return x > 5 }).\n\t\tTake(3).\n\t\tToArray()\n\n\tfmt.Println(\"Result:\", result) \/\/ [6, 8, 10]\n\n\tfirst, ok := From(numbers).First()\n\tif ok {\n\t\tfmt.Println(\"First:\", first)\n\t}\n\n\tlast, ok := From(numbers).Last()\n\tif ok {\n\t\tfmt.Println(\"Last:\", last)\n\t}\n\n\tsum := From(numbers).Sum(func(x int) float64 { return float64(x) })\n\tfmt.Println(\"Sum:\", sum)\n\n\tmin, ok := From(numbers).Min(func(x int) float64 { return float64(x) })\n\tif ok {\n\t\tfmt.Println(\"Min:\", min)\n\t}\n\n\tmax, ok := From(numbers).Max(func(x int) float64 { return float64(x) })\n\tif ok {\n\t\tfmt.Println(\"Max:\", max)\n\t}\n}\n<\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8977","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/8977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=8977"}],"version-history":[{"count":3,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/8977\/revisions"}],"predecessor-version":[{"id":9514,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/8977\/revisions\/9514"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=8977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=8977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=8977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}