[JAVA] ๋” ์ž๋ฐ”, Java 8 Stream

2022. 4. 6. 10:20ใ†JAVA/study

728x90

 

1๏ธโƒฃ Stream

์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์ €์žฅ์†Œ(Collection) ์ด ์•„๋‹ˆ๋‹ค!

Functional in nature, ์ŠคํŠธ๋ฆผ์ด ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค. 

์ŠคํŠธ๋ฆผ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์˜ค์ง ํ•œ๋ฒˆ๋งŒ ์ฒ˜๋ฆฌํ•œ๋‹ค!

๋ฌด์ œํ•œ์ผ ์ˆ˜๋„ ์žˆ๋‹ค. -> ๊ทผ๋ฐ Short Circuit ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค. 

์ค‘๊ฐœ ์˜คํผ๋ ˆ์ด์…˜์€ ๊ทผ๋ณธ์ ์œผ๋กœ lazyํ•˜๋‹ค. 

์†์‰ฝ๊ฒŒ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

2๏ธโƒฃ ์ŠคํŠธ๋ฆผ ํŒŒ์ดํ”„๋ผ์ธ 

0 ๋˜๋Š” ๋‹ค์ˆ˜์˜ ์ค‘๊ฐœ ์˜คํผ๋ ˆ์ด์…˜(Intermediate operation) ๊ณผ ํ•œ๊ฐœ์˜ ์ข…๋ฃŒ ์˜คํผ๋ ˆ์ด์…˜(Terminal operation)์œผ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค. 

์ŠคํŠธ๋ฆผ์˜ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋Š” ์˜ค์ง ํ„ฐ๋ฏธ๋„ ์˜คํผ๋ ˆ์ด์…˜์„ ์‹คํ–‰ํ•  ๋•Œ์—๋งŒ ์ฒ˜๋ฆฌํ•œ๋‹ค. 

 

3๏ธโƒฃ ์ค‘๊ฐœ ์˜คํผ๋ ˆ์ด์…˜ 

Stream์„ ๋ฆฌํ„ดํ•œ๋‹ค.

Stateless/ Stateful ์˜คํผ๋ ˆ์ด์…˜์œผ๋กœ ๋” ์ƒ์„ธํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. 

๋Œ€๋ถ€๋ถ„์€ stateless์ด์ง€๋งŒ distinct๋‚˜ sorted์ฒ˜๋Ÿผ ์ด์ „ ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•ด์•ผํ•˜๋Š” ์˜คํผ๋ ˆ์ด์…˜์€ Stateful ์˜คํผ๋ ˆ์ด์…˜์ด๋‹ค. 

filter, map, limit, skip, sorted...

 

4๏ธโƒฃ ์ข…๋ฃŒ ์˜คํผ๋ ˆ์ด์…˜ 

Stream์„ ๋ฆฌํ„ดํ•˜์ง€ ์•Š๋Š”๋‹ค. 

collect, allMatch, count, forEach, min, max...

 

5๏ธโƒฃ Stream API 

- ๊ฑธ๋Ÿฌ๋‚ด๊ธฐ filter 

 

- ๋ณ€๊ฒฝํ•˜๊ธฐ Map(Function) ๋˜๋Š” FlatMap(Function)

์˜ˆ) List<Stream<String>>์„ String์˜ ์ŠคํŠธ๋ฆผ์œผ๋กœ 

์˜ˆ) ๊ฐ๊ฐ์˜ Post ์ธ์Šคํ„ด์Šค์—์„œ String title๋งŒ ์ƒˆ๋กœ์šด ์ŠคํŠธ๋ฆผ์œผ๋กœ 

 

- ์ƒ์„ฑํ•˜๊ธฐ generate(Supplier) ๋˜๋Š” Iterate(T seed, UnaryOperator)

์˜ˆ) ๋žœ๋ค int ๋ฌด์ œํ•œ ์ŠคํŠธ๋ฆผ 

์˜ˆ) 10๋ถ€ํ„ฐ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฌด์ œํ•œ ์ˆซ์ž ์ŠคํŠธ๋ฆผ 

 

- ์ œํ•œํ•˜๊ธฐ limit(long) ๋˜๋Š” skip(long)

์˜ˆ) ์ตœ๋Œ€ 5๊ฐœ์˜ ์š”์†Œ๊ฐ€ ๋‹ด๊ธด ์ŠคํŠธ๋ฆผ์„ ๋ฆฌํ„ดํ•œ๋‹ค. 

์˜ˆ) ์•ž์—์„œ 3๊ฐœ๋ฅผ ๋บ€ ๋‚˜๋จธ์ง€ ์ŠคํŠธ๋ฆผ์„ ๋ฆฌํ„ดํ•œ๋‹ค. 

 

- ์ŠคํŠธ๋ฆผ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธ anyMatch(), allMatch(), nonMatch() 

์˜ˆ)  k๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฌธ์ž์—ด์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. (true ๋˜๋Š” false๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.)

์˜ˆ) ์ŠคํŠธ๋ฆผ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’์ด 10๋ณด๋‹ค ์ž‘์€์ง€ ํ™•์ธํ•œ๋‹ค.

- ๊ฐœ์ˆ˜ ์„ธ๊ธฐ count()

์˜ˆ) 10๋ณด๋‹ค ํฐ ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ผ๋‹ค.

 

- ์ŠคํŠธ๋ฆผ์„ ๋ฐ์ดํ„ฐ ํ•˜๋‚˜๋กœ ๋ญ‰์น˜๊ธฐ reduce(identity, BiFucntion), collect(), sum(), max() 

์˜ˆ) ๋ชจ๋“  ์ˆซ์ž ํ•ฉ ๊ตฌํ•˜๊ธฐ 

์˜ˆ) ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ list ๋˜๋Š” set์— ์˜ฎ๊ฒจ ๋‹ด๊ธฐ 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90