[Java] Java8: ์ŠคํŠธ๋ฆผ(Stream)

์ŠคํŠธ๋ฆผ์€ ๋ฐฐ์—ด ๊ฐ™์€ ์—ฐ์†ํ•œ ๊ฐ’๋“ค์„ ํŽ‘์…”๋„ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์œ ํ‹ธ์„ฑ ํ‘œ์ค€ ๊ธฐ๋Šฅ์ด๋‹ค.

map, filter, reduce ๋“ฑ์˜ ํŽธ๋ฆฌํ•œ ๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋งˆ ์›ฌ๋งŒํ•ด์„œ๋Š” ๋ฐฐ์—ด์„ ๋งŽ์ด ๊ฐ€๊ณตํ• ํ…๋ฐ, Arrays.stream() ํ˜น์€ Stream.of์™€ Stream.toArray๋กœ ์ƒํ˜ธ๊ฐ„์˜ ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋Œ€๊ฐ• ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
map์œผ๋กœ ๊ฐ ๊ฐ’์— 2๋ฅผ ๊ณฑํ•˜๋Š” ์ฝ”๋“œ๋‹ค. image

image ๊ทผ๋ฐ ์ž๋ฐ” ํŠน์œ ์˜ ์ถ”๋ก ๋Šฅ๋ ฅ ๋ถ€์กฑ์œผ๋กœ toArray๋Š” Object ๋ฐฐ์—ด๋งŒ์„ ๋ฑ‰์–ด์„œ, ํƒ€์ดํ•‘์„ ํ•ด์ฃผ๋ ค๋ฉด ์†์„ ์ข€ ์จ์•ผํ•œ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ๋ง์ด๋‹ค. image

image

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฉ”์„œ๋“œ๋“ค์„ ์—ฐ๊ฒฐํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. filter๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ true์ธ ๊ฒƒ๋งŒ ๋‚จ๊ธฐ๊ณ  ๋ฒ„๋ฆฐ๋‹ค. image

image ๋‹จ, ์œ ์˜ํ•  ์ ์€ stream์€ ๋ฉ”์„œ๋“œ๋ฅผ ํ•œ๋ฒˆ ํ˜ธ์ถœํ•˜๋ฉด ๊ฐ์ฒด ์ž์‹ ์ด ์ฃฝ์–ด๋ฒ„๋ฆฐ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ๋ž˜์„œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ๊ฐ’์œผ๋กœ ๋‹ค์‹œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์‹์œผ๋กœ ์—ฐ์‚ฐ์„ ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฟœ๋Š”๋‹ค. image

image

์ด์™ธ์— reduce๋Š” ์ดํ•ฉ ๊ฐ™์€๊ฑธ ๊ตฌํ•˜๊ธฐ ์ข‹๋‹ค. image

image

์ด์™ธ์—๋„ ์ˆ˜๋งŽ์€ ํŽธ์˜๊ธฐ๋Šฅ์ด ๋งŽ์œผ๋‚˜, ๋ณดํ†ต์€ ์ด ์„ธ๊ฐ€์ง€๋ฅผ ๋งŽ์ด ์“ฐ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

๋‚˜๋จธ์ง€ ๊ธฐ๋Šฅ๋“ค์„ ๋” ๋ณด๊ณ ์‹ถ๋‹ค๋ฉด ์•„๋ž˜ ์ฐธ์กฐ๋งํฌ๋กœ ๋“ค์–ด๊ฐ€๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค.



์ฐธ์กฐ
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html