Collection Operations


Plus and minus operators, Group Elements

plus(= +), minus(= -)


컬렉션을 합치거나(합집합), 뺀다(차집합)

val numbers = listOf("one", "two", "three", "four")

val plusList = numbers + "five"
val minusList = numbers - listOf("three", "four")
println(plusList)
println(minusList)

// Output
// [one, two, three, four, five]
// [one, two]


groupBy

associateBy 와 같이LinkedHashMap 을 반환한다. 하지만 람다식의 result가 key 가 되며 같은 키를 갖는 요소들의 list가 value 가 된다.

val numbers = listOf("one", "two", "three", "four", "five")

println(numbers.groupBy { it.first().uppercase() })
println(numbers.groupBy(keySelector = { it.first() }, valueTransform = { it.uppercase() }))

// Output
// {O=[one], T=[two, three], F=[four, five]}
// {o=[ONE], t=[TWO, THREE], f=[FOUR, FIVE]}


groupingBy

앞선 groupBy 와 같은 동작을 하지만 이후 eachCount(), reduce{key, aac:Any, elem -> }, fold(){}, aggregate() 등 확장 함수를 사용할 수 있다.

val numbers = listOf("one", "two", "three", "four", "five", "six")
println(numbers.groupingBy { it.first() }.eachCount())
println(numbers.groupingBy { it.first() }.reduce{key, acc:String, element -> acc+element})

// Output
// {o=1, t=2, f=2, s=1}
// {o=one, t=twothree, f=fourfive, s=six}