2022. 6. 6. 19:59ใJAVA/์๋ฐ์ ์ ์
https://hyejin.tistory.com/604
1๏ธโฃ ์คํธ๋ฆผ์ ์ค๊ฐ์ฐ์ฐ
- ์คํธ๋ฆผ ์๋ฅด๊ธฐ skip(), limit()
skip()๊ณผ limt()์ ์คํธ๋ฆผ์ ์ผ๋ถ๋ฅผ ์๋ผ๋ผ ๋ ์ฌ์ฉ
skip(3)์ ์ฒ์ 3๊ฐ์ ์์๋ฅผ ๊ฑด๋๋ฐ๊ณ , limit(5)์ ์คํธ๋ฆผ์ ์์๋ฅผ 5๊ฐ๋ก ์ ํํ๋ค.
- ์คํธ๋ฆผ์ ์์ ๊ฑธ๋ฌ๋ด๊ธฐ filter(), distinct()
distinct() ๋ ์คํธ๋ฆผ์์ ์ค๋ณต๋ ์์๋ค์ ์ ๊ฑฐํ๊ณ , filter()๋ ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ง์ง ์๋ ์์๋ฅผ ๊ฑธ๋ฌ๋ธ๋ค.
-> filter()๋ ๋ค๋ฅธ ์กฐ๊ฑด์ผ๋ก ์ฌ๋ฌ๋ฒ ์ฌ์ฉํ ์๋ ์๋ค.
- ์ ๋ ฌ sorted()
sorted() ๋ ์ง์ ๋ Comparator๋ก ์คํธ๋ฆผ์ ์ ๋ ฌํ๋๋ฐ, Compartor๋์ int ๊ฐ์ ๋ฐํํ๋ ๋๋ค์์ ์ฌ์ฉํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
Compartor๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ์คํธ๋ฆผ ์์์ ๊ธฐ๋ณธ ์ ๋ ฌ ๊ธฐ์คComparable์ผ๋ก ์ ๋ ฌํ๋ค.
์ด๋ ์คํธ๋ฆผ์ ์์๊ฐ Comparable์ ๊ตฌํํ ํด๋์ค๊ฐ ์๋๋ผ๋ฉด ์์ธ๊ฐ ๋ฐ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ ๋ ฌ ์กฐ๊ฑด์ ์ถ๊ฐํ ๋๋ thenComparing()์ ์ฌ์ฉํ๋ค.
ํ์์ ์ฑ์ ์ ๋ณด๋ฅผ ์์๋ก ํ๋ Stream<Student> ์ ๋ฐ๋ณ๋ก ์ ๋ ฌํ ๋ค์์, ์ด์ ๋ณ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
- ๋ณํ map()
์คํธ๋ฆผ์ ์์์ ์ ์ฅ๋ ๊ฐ ์ค์์ ์ํ๋ ํ๋๋ง ๋ฝ์๋ด๊ฑฐ๋ ํน์ ํํ๋ก ๋ฐํํด์ผ ํ ๋๊ฐ ์๋๋ฐ ์ด๋ ์ฌ์ฉํ๋๊ฒ map()์ด๋ค.
๋งค๊ฐ๋ณ์๋ก Tํ์ ์ Rํ์ ์ผ๋ก ๋ณํํด์ ๋ฐํํ๋ ํจ์๋ฅผ ์ง์ ํด์ผ ํ๋ค.
map() ์ญ์ ์ค๊ฐ ์ฐ์ฐ์ด๋ฏ๋ก, ์ฐ์ฐ ๊ฒฐ๊ณผ๋ String์ ์์๋ก ํ๋ ์คํธ๋ฆผ์ด๋ค. map()์ผ๋ก Stream<File> ์ Stream<String>์ผ๋ก ๋ณํํ๋ค๊ณ ๋ณผ ์ ์๋ค.
map()๋ filter() ์ฒ๋ผ ํ๋์ ์คํธ๋ฆผ์ ์ฌ๋ฌ๋ฒ ์ ์ฉํ ์ ์๋ค.
- ์กฐํ peek()
์ฐ์ฐ๊ณผ ์ฐ์ฐ ์ฌ์ด์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌ๋์๋์ง ํ์ธํ๊ณ ์ถ๋ค๋ฉด, peek()์ ์ฌ์ฉํ์.
peek()๋ ์คํธ๋ฆผ์ ์์๋ฅผ ์๋ชจํ์ง ์์ผ๋ฏ๋ก ์ฐ์ฐ ์ฌ์ด์ ์ฌ๋ฌ ๋ฒ ๋ผ์ ๋ฃ์ด๋ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
- flapMap() : Stream<T[]> ๋ฅผ Stream<T>๋ก ๋ณํ
์คํธ๋ฆผ์ ์คํธ๋ฆผ -> ์คํธ๋ฆผ
์คํธ๋ฆผ์ ์์๊ฐ ๋ฐฐ์ด์ด๊ฑฐ๋ map()์ ์ฐ์ฐ๊ฒฐ๊ณผ๊ฐ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ, ์ฆ ์คํธ๋ฆผ์ ํ์ ์ด Stream<T[]> ์ธ ๊ฒฝ์ฐ, Stream<T>๋ก ๋ค๋ฃจ๋ ๊ฒ์ด ๋ ํธ๋ฆฌํ ๋๊ฐ ์๋ค.
๊ทธ๋ด ๋๋ map()๋์ flatMap()์ ์ฌ์ฉํ๋ฉด ๋๋ค.
-> ์ฌ๋ฌ ๋ฌธ์ฅ์ ์์๋ก ํ๋ ์คํธ๋ฆผ์ด ์์ ๋, ์ด ๋ฌธ์ฅ๋ค์ split()์ผ๋ก ๋๋ ์ ์์๊ฐ ๋จ์ด์ธ ์คํธ๋ฆผ์ ๋ง๋ค๊ณ ์ถ์ ๋ flatMap()์ ์ฌ์ฉํ๋ฉด ๋๋ค.
flatMap()์ ์คํธ๋ฆผ์ ์คํธ๋ฆผ์ ํ๋์ ์คํธ๋ฆผ์ผ๋ก ํฉ์น ๋ ์ฌ์ฉํ๋ค.
2๏ธโฃ Optional<T>
Optional<T>๋ ์ง๋ค๋ฆญ ํด๋์ค๋ก Tํ์ ์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ธ๋ ๋ํผ ํด๋์ค์ด๋ค.
Optionalํ์ ์ ๊ฐ์ฒด์๋ ๋ชจ๋ ํ์ ์ ์ฐธ์กฐ๋ณ์๋ฅผ ๋ด์ ์ ์๋ค.
์ต์ข ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋ฅ ๋ฐํํ๋ ๊ฒ์ด ์๋๋ผ Optional ๊ฐ์ฒด์ ๋ด์์ ๋ฐํํ๋ ๊ฒ์ด๋ค.
์ด์ฒ๋ผ ๊ฐ์ฒด์ ๋ด์์ ๋ฐํ์ใ ํ๋ฉด, ๋ฐํ๋ ๊ฒฐ๊ณผ๊ฐ null์ธ์ง ๋งค๋ฒ if๋ฌธ์ผ๋ก ์ฒดํฌํ๋ ๋์ Optional์ ์ ์๋ ๋ฉ์๋๋ฅผ ํตํด์ ๊ฐ๋จํ ์ฒ๋ฆฌํ ์ ์๋ค.
- Optional ๊ฐ์ฒด ์์ฑํ๊ธฐ
Optional ๊ฐ์ฒด๋ฅผ์์ฑํ ๋๋ of() ๋๋ ofNullable() ์ ์ฌ์ฉํ๋ค.
๋ง์ผ ์ฐธ์กฐ๋ณ์์ ๊ฐ์ด Null์ผ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฉด, of() ๋์ ofNullable()์ ์ฌ์ฉํด์ผ ํ๋ค.
of()๋ ๋งค๊ฐ๋ณ์์ ๊ฐ์ด null์ด๋ฉด NPE ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ Optional<T> ํ์ ์ ์ฐธ์กฐ๋ณ์๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ด๊ธฐํํ ๋๋ empty()๋ฅผ ์ฌ์ฉํ๋ค.
null๋ก ์ด๊ธฐํํ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง๋ง, empty()๋ก ์ด๊ธฐํํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
- Optioanl ๊ฐ์ฒด์ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
Optional ๊ฐ์ฒด์ ์ ์ฅ๋ ๊ฐ์ ๊ฐ์ ธ์ฌ ๋๋ get()์ ์ฌ์ฉํ๋ค. ๊ฐ์ด null์ผ ๋๋ NoSuchElementException์ด ๋ฐ์ํ๋ฉฐ ์ด๋ฅผ ๋๋นํด์ orElse()๋ก ๋์ฒดํ ๊ฐ์ ์ง์ ํ ์ ์๋ค.
orElse()์ ๋ณํ์ผ๋ก๋ null์ ๋์ฒดํ ๊ฐ์ ๋ฐํํ๋ ๋๋ค์์ ์ง์ ํ ์ ์๋ orElseGet()๊ณผ null์ผ ๋ ์ง์ ๋ ์์ธ๋ฅผ ๋ฐ์์ํค๋ orElseThrow() ๊ฐ ์๋ค.
- isPresent()
Optional() ๊ฐ์ฒด์ ๊ฐ์ด null์ด๋ฉด false, ์๋๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ifPresent()๋ ๊ฐ์ด ์์ผ๋ฉด ์ฃผ์ด์ง ๋๋ค์์ ์คํํ๊ณ ์์ผ๋ฉด ์๋ฌด์ผ๋ ํ์ง ์๋๋ค.
- OptionalInt, OptionalLong, OptionalDouble
Optional<T>๋ฅผ ์ฌ์ฉํด๋ ๋๊ธฐ๋ ํ์ง๋ง, Optional์ญ์ ํ๋ฒ ๋ ๊ฐ์ธ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์์ข์ ํธ์ด๋ค.
๋ฐ๋ผ์ ์ฑ๋ฅ์ ์กฐ๊ธ์ด๋ผ๋ ๋์ด๊ธฐ ์ํด์ OptionalInt, OptionalLong ๋ฑ์ ์ฌ์ฉํ๋ค.
'JAVA > ์๋ฐ์ ์ ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] 25. ์คํธ๋ฆผ์ ์ต์ข ์ฐ์ฐ (forEach(), reduce(), collect(), groupingBy(), partioningBy()..) (0) | 2022.06.08 |
---|---|
[JAVA] 23. ๋ฉ์๋ ์ฐธ์กฐ, ์คํธ๋ฆผ(Stream) (0) | 2022.06.05 |
[JAVA] 22. ๋๋ค์ (Lambda Expression) (0) | 2022.06.01 |
[JAVA] 21. ์ฐ๋ ๋ ์คํ ์ ์ด ๋ฉ์๋(sleep ,interrupt, stop, suspend, resume, join, yield) (0) | 2022.05.29 |
[JAVA] 20. ์ฐ๋ ๋ Thread (0) | 2022.05.22 |