익명 함수 이용하기
(인자(넘겨줄게 없는 경우 생략)) -> {
System.out.println("Hello Java");
}
표현해야될 내용이 한 줄로 짧다면 중괄호를 생략할 수 있다.
() -> System.out.println("Hello Java");
이번에 숫자야구 프로젝트를 하면서 stream()의 map을 이용해 HashSet에 저장된 숫자들을 스트링으로 변환하여 요소들을 하나의 String으로 가공해봤다.
answerNumber = randomSet.stream().map(String::valueOf).collect(Collectors.joining());
System.out.println(answerNumber);//테스트용
Java8에서 도입된 클래스이며 주로 null값을 처리할 때 사용한다. null을 참조할 경우 NullPointerException이 발생할 수 있는데 Optional을 사용하면 이러한 문제를 좀 더 우아하게 처리할 수 있다.
Optional<Car> emptyOptional = Optional.empty();
Optinal<Car> hasDataOptional = Optional.of(new Car());
Optional<Car> gasDataOptional = Optional.ofNullable(getcarFromDB());
Optional<String> carName = getCarNameFromDB();
orElse()를 통해 값을 받아온다, 파라미터로는 null인 경우 반환할 값을 적는다.
String carName = getCarNameFromDB().orElse("NoCar");
orElseGet() 메서드를 사용해서 값을 받아올 수도 있다. 값이 null인 경우 파라미터로 실행된 함수를 전달한다.
Car car = getCarNameFromDB().orElseGet(Car::new);
값이 없는 경우, 로직을 수행하는데 큰 장애가 되는 경우는 예외를 발생시킬수도 있다.
Car car = getCarNameFromDB().orElseThrow(() -> new CarNotFoundException("No Car!"));
(orElseThrow로 예외를 던지는데 익명함수를 사용해 예외를 호출하고 있는 부분이다.)