์ฝํ๋ฆฐ์ผ๋ก ํ๋ก๊ทธ๋๋จธ์ค์ ์๋ ๋ฌธ์ ๋ฅผ ํธ๋ ๋์ค, ์คํ์ฑํ ๋ฐฉ์ ๋ค๋ฅธ ์ฌ๋ ํ์ด์ asSequence()๋ฅผ ์ด์ฉํ ๊ฒ์ ๋ณด๊ฒ ๋์๋ค.
์ฝํ๋ฆฐ์ ๊ณต๋ถํ๋ ์ ์ฅ์์ ๋ชจ๋ฅธ ์ฑ๋ก ๋์ด ๊ฐ ์ ์์ด ๊ธ์ ์์ฑํ๊ฒ ๋์๋ค.
์ฐ์ , kotlin์ Collections์ eager evaluation ๋ฐฉ์์ผ๋ก ์ฐ์ฐ์ด ์งํ๋๋ค.
Java์ Stream์ lazy evaluation ๋ฐฉ์์ผ๋ก ์ฐ์ฐ์ด ์งํ๋๋ค.
๊ณผ์ ์ ๋ค๋ฅด์ง๋ง ๊ฒฐ๊ณผ๋ ๋์ผํ๋ค!!.
asSequence()๋ Java์ stream๊ณผ ๋์ผํ๊ฒ lazy evaluation ๋ฐฉ์์ผ๋ก ์ฐ์ฐ์ด ์งํ๋๋ค.
์๋ ๊ฒฐ๊ณผ๋ ๋์ผํ๋ฉด ๊ตณ์ด asSequence๋ฅผ ์ฐ๋ ์ด์ ๊ฐ ๋ญ๊น?
asSequence() ๋ฌด์กฐ๊ฑด ์จ์ผํ๋ ๊ฑฐ ์๋์ผ? ์ ์๋ ์ผ๋ถ๋ฅผ ๋ฐ์ทํ ๊ธ์ ๋๋ค.
์์์ ์๊ฐ ์ ์ ๋๋ ๋๋ค ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ค๋ฒํค๋๊ฐ ๋ ํฌ๊ณ
์์์๊ฐ ๋ง์ ๋๋ ์คํธ๋ฆผ์ ๋งค๋ฒ ์์ฑํ๋ ๊ฒ์ด ์ค๋ฒํค๋๊ฐ ๋ ํฌ๋ค.
์ปฌ๋ ์ ์ ํฌ๊ธฐ๊ฐ ํด ๋๋ง asSequence() ๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋ฐฑ๋ฌธ์ด ๋ถ์ฌ์ผ๊ฒฌ, ์ง์ ํด๋ณด๋ฉด์ ํ์ธํด๋ณด์.
์์ ์ฝ๋๋ก ํ์ธํด ๋ณด์.
1. stream()๋ฅผ ์ด์ฉํด์ ํ ๊ฒฝ์ฐ
val list = listOf("apple","banana","watermelon","cherry")
val list1 = list.stream().filter {
println("Stream filter: $it")
it.length > 5
}.map{
println("Stream map : $it")
}.collect(Collectors.toList())
//list1 ๊ฒฐ๊ณผ
Stream filter: apple
Stream filter: apple
Stream map : banana
Stream filter: watermelon
Stream map : watermelon
Stream filter: cherry
Stream map : cherry
2. asSequence()๋ฅผ ์ด์ฉํ ๊ฒฝ์ฐ
val list3 = list.asSequence().filter {
println("AsSequence filter: $it")
it.length > 5
}.map{
println("AsSequence map: $it")
}.toList()
//list3 ๊ฒฐ๊ณผ
AsSequence filter: apple
AsSequence filter: apple
AsSequence map : banana
AsSequence filter: watermelon
AsSequence map : watermelon
AsSequence filter: cherry
AsSequence map : cherry
stream()๊ณผ asSequence()๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
stream()๊ณผ asSequence()๋ filter์์ ๊ฑธ๋ฌ์ง ์์๋ฅผ ๋ฐ๋ก map ์ฐ์ฐ์ผ๋ก ์งํํ๋ค.
3. stream()์ ์ด์ฉํ์ง ์์ ๊ฒฝ์ฐ
val list2 = list.filter {
println("Not Stream filter : $it")
it.length > 5
}.map{
println("Not Stream map : $it")
}.toList()
//list2 ๊ฒฐ๊ณผ
Not Stream filter : apple
Not Stream filter : banana
Not Stream filter : watermelon
Not Stream filter : cherry
Not Stream map : banana
Not Stream map : watermelon
Not Stream map : cherry
๋ฐ๋ฉด์ kotlin collections๋ง์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋งค ์ฐ์ฐ์๋ง๋ค ์๋ก์ด intermediate collection์ด ์์ฑ๋์ด ์ฐ์ฐ์ด ์งํ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ฝํ๋ฆฐ ์
๋ฌธ ์คํฐํฐ(15) Sequence
asSequence() ๋ฌด์กฐ๊ฑด ์จ์ผํ๋ ๊ฑฐ ์๋์ผ?