week9_incheol_1 - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
Optional ๊ฐ์ฒด ์์ฑ
-
Optional.of
value๊ฐ null ์ผ ๊ฒฝ์ฐ NPE ์์ธ๊ฐ ๋ฐ์ํ๋ค.
Optional<City> city = Optional.of(city);
-
Optional.ofNullable
value๊ฐ null์ธ ๊ฒฝ์ฐ ๋น์ด์๋ Optional์ ๋ฐํํ๋ค.
Optional<City> city = Optional.ofNullable(city);
-
Optional.isEmpty
๋น์ด์๋ Optional ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
Optional<City> city = Optional.isEmpty();
Optional ์ค๊ฐ์ฒ๋ฆฌ
-
filter
predicate ๊ฐ์ด ์ฐธ์ด๋ฉด ํด๋น ํํฐ๋ฅผ ํต๊ณผ์ํค๊ณ ๊ฑฐ์ง์ด๋ฉด ๋น์ด์๋ Optional ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
return Optional.ofNullable(address) .filter(a -> a.getStreet().contains("seoul")) .map(Address::getStreet) .orElse("incheol");
-
map
๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ณํํ๋ค.
return Optional.ofNullable(city) .map(City::getAddress) .map(Address::getZipcode) .map(Zipcode::getCode) .orElse("incheol");
-
flatMap
map๊ณผ ๋์ผํ์ง๋ง ๋ณํ๋ ๊ฐ์ Optional๋ก ๊ฐ์ธ์ฃผ๋๊ฒ ์ฐจ์ด๋ค.
return Optional.ofNullable(city) .flatMap(City::getAddress) .flatMap(Address::getZipcode) .flatMap(Zipcode::getCode) .orElse("incheol");
Optional ์ข ๋จ์ฒ๋ฆฌ
-
ifPresent
๊ฐ์ด null์ด ์๋๋ผ๋ฉด ์คํํ๋ค.
City city = new City("seoul"); Optional.ofNullable(city).ifPresent(i -> System.out.println(i.getName()));
-
isPresent
๊ฐ์ด null ์ธ์ง ์๋์ง ์ฌ๋ถ๋ง ํ์ธํ๋ค.
if(Optional.ofNullable(city).isPresent()){ System.out.println(i.getName()) }
-
get
Optional ์ค์ ๊ฐ์ ๋ฆฌํดํ๋ค. ์์ผ๋ฉด ์์ธ๊ฐ ๋ฐ์ํ๋ค.
City city = Optional.ofNullable(city).get()
-
orElse
Optional ๊ฐ์ฒด๊ฐ ๋น์ด์๋ค๋ฉด ๋ฆฌํดํ ๊ฐ์ ์ ํด์ค๋ค. (๋ฌด์กฐ๊ฑด ํจ์๋ฅผ ์คํํจ์ผ๋ก ์คํ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ ์ฐ์ฐ์ ํผํด์ผ ํ๋ค)
return Optional.ofNullable(city) .map(City::getName) .orElse(printTest());
-
orElseGet
Optional ๊ฐ์ฒด๊ฐ ๋น์ด์๋ค๋ฉด ๋ฆฌํดํ ๊ณต๊ธ์ ํจ์(Supplier)๋ฅผ ์ ์ํ ์ ์๋ค. (๋น์ด์์ ๊ฒฝ์ฐ์๋ง ์คํ๋จ)
return Optional.ofNullable(city) .map(City::getName) .orElseGet(() -> printTest());
-
orElseThrow
Optional ๊ฐ์ฒด๊ฐ ๋น์ด์๋ค๋ฉด ์ฌ์ฉ์๊ฐ ์ ์ํ ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค.
return Optional.ofNullable(city) .map(City::getName) .orElseThrow(Exception::new);
java 9
-
or
orElseGet๊ณผ ์ ์ฌํ์ง๋ง ์ค๊ฐ์ ์ฐ์ ์์์ ๋ฐ๋ผ ์ค์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ฌ์ฉํ ์ ์๋ค.
Address notEmptyAddress = new Address("seongnam"); Address notEmptyAddress2 = new Address("daegue"); // ๋ฆฌํด๊ฐ : seongnam return Optional.ofNullable(address) .filter(a -> a.getStreet().contains("seoul")) .or(Optional::empty) .or(() -> Optional.ofNullable(notEmptyAddress)) .or(() -> Optional.ofNullable(notEmptyAddress2)); // ๋ฆฌํด๊ฐ : daegue return Optional.ofNullable(address) .filter(a -> a.getStreet().contains("seoul")) .or(() -> Optional.ofNullable(notEmptyAddress2)) .or(() -> Optional.ofNullable(notEmptyAddress));
-
ifPresentOrElse
ifPresent์ ์ ์ฌํ์ง๋ง ๊ฐ์ด ๋น์ด์์ ๊ฒฝ์ฐ์ ๋น์ด์์ง ์์ ๊ฒฝ์ฐ ๋ชจ๋๋ฅผ ํ๋ฒ์ ์ ์ํ ์ ์๋ค.
// ๋ฉ์๋ ์๊ทธ๋์ฒ public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction); // ์์ Optional.ofNullable("test") .ifPresentOrElse(value -> System.out.println(value), () -> System.out.println("null")); // print 'test' Optional.ofNullable(null) .ifPresentOrElse(value -> System.out.println(value), () -> System.out.println("null")); // print 'null'
-
stream
์ต์ ๋ ๊ฐ์ฒด๋ฅผ ์คํธ๋ฆผ ๊ฐ์ฒด๋ก ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
// ๋ฉ์๋ ์๊ทธ๋์ฒ public Stream<T> stream(); // ์์ List<String> result = List.of(1, 2, 3, 4) .stream() .map(val -> val % 2 == 0 ? Optional.of(val) : Optional.empty()) .flatMap(Optional::stream) .map(String::valueOf) .collect(Collectors.toList()); System.out.println(result); // print '[2, 4]'
java 10
-
orElseThrow
๋งค๊ฐ๋ณ์๊ฐ ํ์์๋ ์์ธ ๋ฉ์๋๊ฐ ์ถ๊ฐ๋์๋ค.
// ๋ฉ์๋ ์๊ทธ๋์ฒ public T orElseThrow(); // ์์ (์๋ฐ 8) Optional.ofNullable(something).orElseThrow(NoSuchElementException::new); // ์์ (์๋ฐ 10) Optional.ofNullable(something).orElseThrow();