์คํธ๋ฆผ์ด๋?!
์คํธ๋ฆผ์ ๋ฐฐ์ด, ์ปฌ๋ ์ ์ ์์๋ค์ ์์ฐจ์ ์ผ๋ก ์ฐธ์กฐํ์ฌ ๋๋ค์์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฐ๋ณต์์ด๋ค.
์คํธ๋ฆผ์ ํ์ฉํ๋ฉด ๋ง์ ์์ ๋ฐ์ดํฐ์ ๋ณต์กํ ์ฐ์ฐ์ ์ํํ ์ ์๊ณ ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ด ๋์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
ํน์ง
์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์ฝ๋๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์ ๋์ ์๋ฆฌ๋ฅผ ๋ชจ๋ฅด๋๋ผ๋ ๋ฉ์๋ ์ด๋ฆ์ ๋ณด๊ณ ๋ฌด์จ ์ผ์ ํ๋์ง ์ดํดํ๊ธฐ๊ฐ ์ฝ๋ค๋ ์ฅ์ ์ด ์๋ค.
๋ํ for๋ฌธ, while๋ฌธ์์ index๋ iterator๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ก ์ง์ ๋ชจ๋ ์์๋ฅผ ๋ฐ๋ณตํ๋ ์ธ๋ถ ๋ฐ๋ณต์์ ๋ฌ๋ฆฌ ๋ด๋ถ ๋ฐ๋ณต์๋ฅผ ์ด์ฉํ์ฌ ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ์ฝ๋ค. ๋ด๋ถ ๋ฐ๋ณต์๋ฅผ ์ด์ฉํ๋ฉด ์ปฌ๋ ์ ๋ด๋ถ์์ ์ด๋ป๊ฒ ์์๋ฅผ ๋ฐ๋ณต์ํค๋์ง๋ ์ถ์ํ์ํค๊ณ ๊ฐ๋ฐ์๋ ์ฒ๋ฆฌํด์ผ ํ ์ฝ๋๋ง ์์ฑํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๋ํ ์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ๋ง ํ ์ ์๊ณ ํ ๋ฒ ์ฌ์ฉํ๊ณ ๋๋ฉด ๋ซํ๊ธฐ ๋๋ฌธ์ ํ์ํ๋ค๋ฉด ์๋ก์ด ์คํธ๋ฆผ์ ๋ง๋ค์ด์ผ ํ๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
1. ์คํธ๋ฆผ ์์ฑ
Collection ์ธํฐํ์ด์ค์๋ stream()
์ด ์ ์๋์ด ์์ด์ Collection์ ๊ตฌํํ ๊ฐ์ฒด๋ค์ ๋ชจ๋ stream()
์ผ๋ก ์คํธ๋ฆผ์ ์์ฑํ ์ ์๋ค.
Collection์ด ์๋ ๋ฐฐ์ด์ ์์๋ค๋ก Stream์ ์์ฑํ๊ธฐ ์ํด์๋ Stream.of()
๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ Arrays.stream()
์ ์ฌ์ฉํ๋ค.
2. ์ค๊ฐ ์ฐ์ฐ
์ค๊ฐ ์ฐ์ฐ์ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์คํธ๋ฆผ์ผ๋ก ๋ฐํํ๊ธฐ ๋๋ฌธ์ ์ฐ์ํด์ ์ฌ๋ฌ ๋ฒ ์ํํ ์ ์๋ค.
ํํฐ๋ง
distinct()
: Stream ์์์ ์ค๋ณต์ ์ ๊ฑฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
filter()
: ๋งค๊ฐ ๊ฐ์ผ๋ก ์กฐ๊ฑด์ด ์ฃผ์ด์ง๊ณ ์กฐ๊ฑด์ด ์ฐธ์ด ๋๋ ์์๋ง ํํฐ๋งํ๋ค.
๋งคํ
map()
: ๊ธฐ์กด์ ์์๋ค์ ๋์ฒดํ๋ ์์๋ก ๊ตฌ์ฑ๋ ์๋ก์ด Stream์ ํ์ฑํ๋ ์ฐ์ฐ์ด๋ค.
์ ๋ ฌ
sorted()
: ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ์ด ๋๋ฉฐ ํ๋ผ๋ฏธํฐ๋ก ๋น๊ต์๋ฅผ ๋๊ธธ ์๋ ์๋ค.
ex) ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ : sorted(Comparator.reverseOrder())
์ฐ์ฐ ๊ฒฐ๊ณผ ํ์ธ
peek()
: ์์๋ฅผ ํ๋์ฉ ๋๋ฉด์ ์ถ๋ ฅํ๋ฉฐ ์ค๊ฐ ์ฐ์ฐ ๋ฉ์๋ ์ด๋ค. ์ฃผ๋ก ์ฐ์ฐ ์ค๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ์ฌ ๋๋ฒ๊น
ํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ค.
3. ์ต์ข ์ฐ์ฐ
์ต์ข ์ฐ์ฐ์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ์คํธ๋ฆผ์ด ์๋๊ธฐ ๋๋ฌธ์ ํ๋ฒ๋ง ์ฐ์ฐ์ด ๊ฐ๋ฅํ๋ค.
์ฐ์ฐ ๊ฒฐ๊ณผ ํ์ธ
forEach()
: peek()
๊ณผ ๋์ผํ๊ฒ ์์๋ฅผ ํ๋์ฉ ๋๋ฉด์ ์ถ๋ ฅํ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค.
๋งค์นญ
match()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ Stream์ ์์๋ค์ด ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋์ง ๊ฒ์ฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ boolean์ผ๋ก ๋ฐํํ๋ค.
allMatch()
: ๋ชจ๋ ์์๋ค์ด ๋งค๊ฐ ๊ฐ์ผ๋ก ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ๊ฒ์ฌ
anyMatch()
: ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์๊ฐ ํ๋๋ผ๋ ์๋์ง ๊ฒ์ฌ
noneMatch()
: ๋ชจ๋ ์์๊ฐ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋์ง ๊ฒ์ฌ
๊ธฐ๋ณธ ์ง๊ณ
์์๋ค์ ํฉ๊ณ, ์นด์ดํ , ํ๊ท ๊ฐ, ์ต๋๊ฐ, ์ต์๊ฐ์ ์ฐ์ฐํ์ฌ ๊ฐ์ผ๋ก ์ฐ์ถํ๋ค.
๋ฉ์๋๋ก๋ sum()
, count()
, average()
, max()
, min()
์ด ์๋ค.
๋ณํ
Stream์ ์์๋ค์ List๋ Set, Map ๋ฑ ๋ค๋ฅธ ์ข ๋ฅ์ ์ปฌ๋ ์ ์ผ๋ก ๋ฐ๊ณ ์ถ์ ๊ฒฝ์ฐ์ collect() ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ค.
list.stream()
.collect(Collectors.toList());
์์
ex1 ) String ํ์ ์ ์์๋ก ๊ฐ์ง๋ List๋ฅผ ์ ๋ ฅ๋ฐ์ ์ค๋ณต์ ์ ๊ฑฐํ๊ณ ์ ๋ ฌํ ํ String ํ์ ์ ์์๋ก ๊ฐ๋ ๋ฐฐ์ด๋ก ๋ฆฌํด
public class Solution {
public String[] makeUniqueNameArray(List<String> names) {
return names.stream()
.distinct()
.sorted()
.toArray(String[]::new);
}
}
ex2 ) String ํ์ ์ ์์๋ก ๊ฐ์ง๋ List ๋ ๊ฐ๋ฅผ ์ ๋ ฅ๋ฐ์, ์คํธ๋ฆผ์ ์ด์ฉํด ํ๋์ List๋ก ํฉ์น ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํด
public class Solution {
public List<String> mergeTwoStream(List<String> list1, List<String> list2) {
List<String> result = Stream.concat(list1.stream(), list2.stream()).collect(Collectors.toList());
return result;
}
}
Optional
Optional์ NullPointerException(NPE)๋ฅผ ๋ฐฉ์งํ๋ ์ฐจ์์์ ๋์ ๋์์ผ๋ฉฐ, ๋ชจ๋ ํ์ ์ ๊ฐ์ฒด๋ฅผ ๋ด์ ์ ์๋ Wrapper ํด๋์ค์ด๋ค.
์คํธ๋ฆผ๊ณผ ์ ์ฌํ๊ฒ ๋ฉ์๋๋ฅผ ์ฌ๋ฌ ๊ฐ ์์ฑํ ์ ์๋ค๋ ํน์ง์ ๊ฐ๊ณ , ์ฐ์ฐ์ ์ํํ ํ์ ๊ฒฐ๊ณผ๋ฅผ Optional ๊ฐ์ฒด๋ก ๋ฐํํด์ฃผ๋ฉด ๋ฐ๋ก ์กฐ๊ฑด๋ฌธ์ ์ฐ์ง ์์๋ NPE๋ฅผ ๋ฐฉ์งํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
Optional ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ of()
, ๋ง์ฝ ์ฐธ์กฐ๋ณ์์ ๊ฐ์ด null์ผ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด ofNullable()
์ ์ฌ์ฉํ๋ค.
Optional<String> opt1 = Optional.ofNullable("111");
Optional ๊ฐ์ฒด์ ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ get()
์ ์ฌ์ฉํ๋ค. ๋ง์ฝ ๊ฐ์ด null์ผ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด orElse()
์ ๋งค๊ฐ๋ณ์ ๊ฐ์ผ๋ก default ๊ฐ์ ์ง์ ํ ์ ์๋ค.
Optional (Java Platform SE 8 )
A container object which may or may not contain a non-null value. If a value is present, isPresent() will return true and get() will return the value. Additional methods that depend on the presence or absence of a contained value are provided, such as orEl
docs.oracle.com
'๐ Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] JVM(Java Virtual Machine) (0) | 2022.09.19 |
---|---|
[Java] ์ค๋ ๋(Thread) (0) | 2022.09.18 |
[Java] ๋๋ค์๊ณผ ํจ์ํ ์ธํฐํ์ด์ค (0) | 2022.09.17 |
[Java] ์ปฌ๋ ์ (Collection) (3) | 2022.09.17 |
[Java] ์ ๋ค๋ฆญ๊ณผ ์์ธ ์ฒ๋ฆฌ (0) | 2022.09.16 |