1. ํ์ธ
๋ฐ์ดํฐ ์คํธ๋ฆผ์ ํจ๊ป ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๋ ๋ฐ ์ด๋ฏธ ์ง๋ฃจํ ์ ์์ต๋๋ค. ๋ง์นจ๋ด ๋ฐ์ดํฐ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ํ๋ ค๊ณ ํฉ๋๋ค.
์ด Stream
ํด๋์ค์๋ ์คํธ๋ฆผ์ ๊ตฌ์ฑํ์ง ์๊ณ ์คํธ๋ฆผ์ ์ด๋ค ์ข
๋ฅ์ ๋ฐ์ดํฐ๊ฐ ์๋์ง ํ์ธํ๋ ์ธ ๊ฐ์ง ํ์ค ๋ฉ์๋๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๋ฉ์๋๋ anyMatch()
, allMatch()
๋ฐ ์
๋๋ค noneMatch()
.
boolean anyMatch(rule)
๋ฐฉ๋ฒ
์ด ๋ฉ์๋๋ ์คํธ๋ฆผ์ ๋ฉ์๋์ ์ ๋ฌ๋ ๊ท์น์ ๋ง์กฑํ๋ ์์๊ฐ ํ๋ ์ด์ ์๋์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ฌํ ์์๊ฐ ์์ผ๋ฉด ๋ฉ์๋๋ ๋ฅผ ๋ฐํํ๊ณ true
๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฅผ ๋ฐํํฉ๋๋ค false
.
์
์ํธ | ๋ฉ๋ชจ |
---|---|
|
|
|
|
|
|
๋ง์ง๋ง ์์์๋ ๋จผ์ 0๋ณด๋ค ์์ ์์๋ง ์ ์งํ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ์ฌ ํํฐ๋ง๋ ์์ ์ค 0๋ณด๋ค ํฐ ๊ฒ์ด ์๋์ง ํ์ธํฉ๋๋ค. ๋ฌผ๋ก ๊ทธ๋ฌํ ์์๋ ๋ ์ด์ ์กด์ฌํ์ง ์์ต๋๋ค.
๋ถ์ธ allMatch(rule) ๋ฉ์๋
์ด ๋ฉ์๋๋ ์คํธ๋ฆผ์ ๋ชจ๋ ์์๊ฐ ๊ท์น(์กฐ๊ฑด์๋ผ๊ณ ๋ ํจ)๊ณผ ์ผ์นํ๋์ง ํ์ธํฉ๋๋ค. ๊ท์น์ ๋ฉ์๋์ ๋ํ ์ธ์๋ก ์ ๋ฌ๋ฉ๋๋ค.
์ํธ | ๋ฉ๋ชจ |
---|---|
|
(0๋ณด๋ค ํฐ ๋ชจ๋ ์์) |
|
(0๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์๊ฐ ์์ต๋๊น?) |
|
(์ฐ๋ฆฌ๋ 0๋ณด๋ค ์์ ์์๋ฅผ ์ ์งํ์ต๋๋ค) |
๋ง์ง๋ง ์์์๋ ๋จผ์ 0๋ณด๋ค ์์ ์์๋ง ํํฐ๋ฅผ ํต๊ณผํ๋๋ก ํ์ฉํ ๋ค์ ์ ์ง๋ ๋ชจ๋ ์์๊ฐ 0๋ณด๋ค ์์์ง ํ์ธํฉ๋๋ค. ํ์ธ ๊ฒฐ๊ณผ ๊ธ์ ์ ์ธ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋ฉ๋๋ค.
๋ถ์ธ noneMatch(rule) ๋ฉ์๋
์ด noneMatch()
๋ฉ์๋๋ ์คํธ๋ฆผ์ ์ ๋ฌ๋ ๊ท์น๊ณผ ์ผ์นํ๋ ์์๊ฐ ์๋์ง ํ์ธํฉ๋๋ค. ๊ทธ๊ฒ์ anyMatch()
๋ฐฉ๋ฒ์ ๋ฐ๋์ ๊ฐ์ต๋๋ค.
์ํธ | ๋ฉ๋ชจ |
---|---|
|
|
|
|
|
|
2. ์ ํธ๋ฆฌํฐ ํด๋์ค: Optional
ํด๋์ค
๋๋ก๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฐธ์กฐ๋ก ์์
ํ๋ ๊ฒ์ด ๋งค์ฐ ๋ถํธํฉ๋๋ค null
. ์๋ฅผ ๋ค์ด ๋ ๋ฌธ์์ด์ ๋น๊ตํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๋ ๋ณ์๊ฐ ๋ชจ๋ ๊ฐ ์๋ ๊ฒฝ์ฐ null
๊ฐ๋จํ ํธ์ถํ๋ฉด s1.equals(s2)
๋ชจ๋ ๊ฒ์ด ์๋ํฉ๋๋ค. ํ์ง๋ง ๊ทธ๋ด s1
์ ์๋ค๋ฉด .null
NullPointerException
์ด๊ฒ์ด ํ๋ก๊ทธ๋๋จธ๋ค์ด ์ ํธ๋ฆฌํฐ ํด๋์ค๋ฅผ ์๊ฐํด ๋ธ ์ด์ ์
๋๋ค Optional<T>
. ์ฝ๋๋ ๋๋ต ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ํธ | ๋ฉ๋ชจ |
---|---|
|
๊ฐ์ด ์๋์ง ํ์ธํฉ๋๋ค. null ๊ฐ์ด ์๋์ง ํ์ธํฉ๋๋ค. null ์ ์ฅ๋ ๊ฐ์ ๋ฐํํฉ๋๋ค. ๊ฐ์ด null์ธ ๊ฒฝ์ฐ ์์ธ๋ฅผ throwํฉ๋๋ค. ์ ์ฅ๋ null์ด ์๋ ๊ฐ์ ๋ฐํํฉ๋๋ค. ๋๋ ์ ์ฅ๋ ๊ฐ์ด ์ธ ๊ฒฝ์ฐ null ๋ฉ์๋ ์ธ์๋ก ์ ๋ฌ๋ ๊ฐ์ ๋ฐํํฉ๋๋ค. null์ด ์๋ ์ ์ฅ๋ ๊ฐ์ ๋ฐํํ๊ฑฐ๋ ๊ฐ์ด null์ธ ๊ฒฝ์ฐ ์์ธ๋ฅผ throwํฉ๋๋ค. |
์ด ํด๋์ค์ ๋ชฉ์ ์ ๋จ์ํ T ๊ฐ์ฒด(์ ํ์ด T์ธ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ)๋ฅผ ์ ์ฅํ๋ ๊ฒ์
๋๋ค. ๊ฐ์ฒด ๋ด๋ถ์ ๊ฐ์ฒด Optional<T>
์ฐธ์กฐ๋ null
.
์ด ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฝ๊ฐ ๋ ์์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋น๊ตํด๋ณด์:
์ต์ ์ฌ์ฉ | ์ ํ ์ฌํญ์ ์ฌ์ฉํ์ง ์์ |
---|---|
|
|
ํ ๊ฐ์ฒด๋ ์ฐธ์กฐ๋ฅผ ์ ์ฅํ๋๋ผ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํญ์ ๋ค๋ฅธ ๊ฐ์ฒด Optional
์ ๋น๊ตํ ์ ์์ต๋๋ค .Optional
equals
null
๊ฐ๋จํ ๋งํด์ ์ด ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด๊ฐ ๊ฐ์ ์ ์ฅํ๋ ๊ฒฝ์ฐ Optional
"์๋ฆ๋ค์ด" ๊ฒ์ฌ ๋ฐ "์๋ฆ๋ค์ด" ์์
์ ์์ฑํ ์ ์์ต๋๋ค .null
Optional
null
3. ์์ ์ฐพ๊ธฐ
์์
์ผ๋ก ๋์๊ฐ์ Stream
. ์ด Stream
ํด๋์ค์๋ ์คํธ๋ฆผ์์ ์์๋ฅผ ๊ฒ์ํ ์ ์๋ 4๊ฐ์ ์ถ๊ฐ ๋ฉ์๋๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๋ฉ์๋๋ findFirst()
, findAny()
, min()
๋ฐ ์
๋๋ค max()
.
Optional<T> findFirst()
๋ฐฉ๋ฒ
์ด findFirst()
๋ฉ์๋๋ ๋จ์ํ ์คํธ๋ฆผ์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๊ฒ ์ ๋ถ์
๋๋ค.
์ฌ๊ธฐ์ ์ฃผ๋ชฉํด์ผ ํ ๋ ํฅ๋ฏธ๋ก์ด ์ ์ ๋ฉ์๋๊ฐ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ๊ฒ์ด ์๋๋ผ T
๋ํผ Optional<T>
๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค๋ ๊ฒ์
๋๋ค. null
์ด๋ ๊ฒ ํ๋ฉด ๊ฐ์ฒด ์ฐพ๊ธฐ์ ์คํจํ ํ ๋ฉ์๋๊ฐ ๋ฐํ๋์ง ์์ต๋๋ค .
์:
ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "Hello", "how's", "life?");
String str = list.stream().findFirst().get(); // Hello
๋ ๋ช ํํ๊ฒ ํ๊ธฐ ์ํด ๋ง์ง๋ง ์ค์ ์ฌ๋ฌ ์ค๋ก ๋๋๊ฒ ์ต๋๋ค.
ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "Hello", "how's", "life?");
Stream<String> stream = list.stream();
Optional<String> result = stream.findFirst();
String str = result.get(); // Hello
๋ง์ง๋ง get()
๋ฐฉ๋ฒ์ ๋จ์ํ ๊ฐ์ฒด ๋ด๋ถ์ ์ ์ฅ๋ ๊ฐ์ ๊ฒ์ํ๋ ๊ฒ์
๋๋ค Optional
.
Optional<T> findAny()
๋ฐฉ๋ฒ
์ด findAny()
๋ฉ์๋๋ ์คํธ๋ฆผ์์ ๋ชจ๋ ์์๋ฅผ โโ๋ฐํํ๊ณ ๊ฑฐ๊ธฐ์ ๋๋ฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ ์ ์ฌ findFirst()
ํ์ง๋ง ๋ณ๋ ฌ ์์
์ ์ฌ์ฉ๋๋ ์คํธ๋ฆผ์ ์ ํฉํฉ๋๋ค.
์คํธ๋ฆผ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ๋ ์คํธ๋ฆผ์ ์ผ๋ถ์์ ์์๊ฐ ์ด๋ฏธ ๋ฐ๊ฒฌ๋์์ ์ ์์ง๋ง ์ฒซ ๋ฒ์งธ์ธ์ง ์ฌ๋ถ๋ ์์ง ๋ช ํํ์ง ์์ต๋๋ค.
๋ง์ ์์๊ฐ ๋ชจ๋ ํํฐ์ ์ผ์นํ๊ณ ํ๋ก๊ทธ๋๋จธ๊ฐ ๊ทธ ์ค ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ ํํ๊ฒ ์ป๋ ๊ฒ์ด ์ค์ํ๋ค๋ฉด ๋ฉ์๋๋ฅผ findFirst()
ํธ์ถํด์ผ ํฉ๋๋ค. ํ๋ก๊ทธ๋๋จธ๊ฐ ์ค์ ๋ก 0 ๋๋ 1๊ฐ์ ์์๊ฐ ๋ชจ๋ ํํฐ์ ์ผ์นํ๋ค๋ ๊ฒ์ ์๊ณ ์๋ค๋ฉด ๋จ์ํ ํธ์ถํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํ๋ฉฐ ์ด๋ findAny()
๋ ๋น ๋ฅผ ๊ฒ์
๋๋ค.
Optional<T> min(Comparator<T>)
๋ฐฉ๋ฒ
์ด min()
๋ฉ์๋๋ comparator
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์ ๋ชจ๋ ์์๋ฅผ โโ๋น๊ตํ๊ณ ์ต์ ์์๋ฅผ ๋ฐํํฉ๋๋ค. ๋น๊ต ๊ฐ์ฒด๋ฅผ ์ ์ํ๋ ๊ฐ์ฅ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ ๋๋ค ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
๊ฐ์ฅ ์งง์ ๋ฌธ์์ด์ ๊ฒ์ํ๋ ์:
ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "Hello", "how's", "life?");
String min = list.stream().min( (s1, s2)-> s1.length()-s2.length() ).get();
Optional<T> max(Comparator<T>)
๋ฐฉ๋ฒ
์ด max()
๋ฉ์๋๋ comparator
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์ ๋ชจ๋ ์์๋ฅผ โโ๋น๊ตํ๊ณ ์ต๋ ์์๋ฅผ ๋ฐํํฉ๋๋ค. ๋น๊ต ๊ฐ์ฒด๋ฅผ ์ ์ํ๋ ๊ฐ์ฅ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ ๋๋ค ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
๊ฐ์ฅ ๊ธด ๋ฌธ์์ด์ ๊ฒ์ํ๋ ์:
ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "Hello", "how's", "life?");
String max = list.stream().max( (s1, s2)-> s1.length()-s2.length() ).get();
GO TO FULL VERSION