by about 5 years I think.
Smalltalk collections respond to:
select: - provide filtered version of collection ie
#( 1 2 3 4 5 6 ) select: [:each | each isEven].
#(2 4 6)
detect: - first found
#( 1 2 3 4 5 6 ) detect: [:each | each > 3 and: [each isOdd]].
5
reject: - inverted select
#( 1 2 3 4 5 6 ) select: [:each | each isEven].
#(1 3 5)
collect: - used to derive a new collection from an existing one
#( 1 2 3 4 5 6 ) collect: [:each | each * 5].
#(5 10 15 20 25 30)
Nothing to reinvent, really. We were here first.