mirror of
https://github.com/duke-git/lancet.git
synced 2026-03-01 00:35:28 +08:00
feat: add Sorted for stream
This commit is contained in:
+12
-1
@@ -10,6 +10,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"encoding/gob"
|
"encoding/gob"
|
||||||
|
|
||||||
|
"github.com/duke-git/lancet/v2/slice"
|
||||||
"golang.org/x/exp/constraints"
|
"golang.org/x/exp/constraints"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -23,7 +24,7 @@ import (
|
|||||||
// Map(mapper func(item T) T) StreamI[T]
|
// Map(mapper func(item T) T) StreamI[T]
|
||||||
// Peek(consumer func(item T)) StreamI[T]
|
// Peek(consumer func(item T)) StreamI[T]
|
||||||
|
|
||||||
// Sort(less func(a, b T) bool) StreamI[T]
|
// Sorted(less func(a, b T) bool) StreamI[T]
|
||||||
// Max(less func(a, b T) bool) (T, bool)
|
// Max(less func(a, b T) bool) (T, bool)
|
||||||
// Min(less func(a, b T) bool) (T, bool)
|
// Min(less func(a, b T) bool) (T, bool)
|
||||||
|
|
||||||
@@ -312,6 +313,16 @@ func (s stream[T]) Range(start, end int) stream[T] {
|
|||||||
return FromSlice(source)
|
return FromSlice(source)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sorted returns a stream consisting of the elements of this stream, sorted according to the provided less function.
|
||||||
|
func (s stream[T]) Sorted(less func(a, b T) bool) stream[T] {
|
||||||
|
source := []T{}
|
||||||
|
source = append(source, s.source...)
|
||||||
|
|
||||||
|
slice.SortBy(source, less)
|
||||||
|
|
||||||
|
return FromSlice(source)
|
||||||
|
}
|
||||||
|
|
||||||
// ToSlice return the elements in the stream.
|
// ToSlice return the elements in the stream.
|
||||||
func (s stream[T]) ToSlice() []T {
|
func (s stream[T]) ToSlice() []T {
|
||||||
return s.source
|
return s.source
|
||||||
|
|||||||
@@ -303,3 +303,14 @@ func TestStream_Concat(t *testing.T) {
|
|||||||
|
|
||||||
assert.Equal([]int{1, 2, 3, 4, 5, 6}, s.ToSlice())
|
assert.Equal([]int{1, 2, 3, 4, 5, 6}, s.ToSlice())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestStream_Sorted(t *testing.T) {
|
||||||
|
assert := internal.NewAssert(t, "TestStream_Sorted")
|
||||||
|
|
||||||
|
s := FromSlice([]int{4, 2, 1, 3})
|
||||||
|
|
||||||
|
s1 := s.Sorted(func(a, b int) bool { return a < b })
|
||||||
|
|
||||||
|
assert.Equal([]int{4, 2, 1, 3}, s.ToSlice())
|
||||||
|
assert.Equal([]int{1, 2, 3, 4}, s1.ToSlice())
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user