241021 TIL - 모던Java 람다, 스트림, Optional

J_log·2024년 10월 21일
0
post-thumbnail

람다 ()-> {}

익명 함수 이용하기
(인자(넘겨줄게 없는 경우 생략)) -> {
System.out.println("Hello Java");
}

표현해야될 내용이 한 줄로 짧다면 중괄호를 생략할 수 있다.
() -> System.out.println("Hello Java");


Stream

  • 특징
    • 원본의 데이터를 변경하지 않는다.
    • 자바 컬렉션으로 부터 스트림을 받아서 한 번 사용한다.
    • 한번 사용한 스트림은 어디에도 남지 않는다.
  • filter와 map의 차이
    • filter => 조건에 맞는 것만 반환
    • map => 모든 요소를 가공해서 반환
  • forEach() => 컬렉션의 모든 요소를 순회

이번에 숫자야구 프로젝트를 하면서 stream()의 map을 이용해 HashSet에 저장된 숫자들을 스트링으로 변환하여 요소들을 하나의 String으로 가공해봤다.

answerNumber = randomSet.stream().map(String::valueOf).collect(Collectors.joining());
        System.out.println(answerNumber);//테스트용

Optional

Java8에서 도입된 클래스이며 주로 null값을 처리할 때 사용한다. null을 참조할 경우 NullPointerException이 발생할 수 있는데 Optional을 사용하면 이러한 문제를 좀 더 우아하게 처리할 수 있다.

Optional 간단 사용법

  • 값이 null인 Optional 생성하기
    Optional<Car> emptyOptional = Optional.empty();
  • 값이 있는 Optional 생성하기
Optinal<Car> hasDataOptional = Optional.of(new Car());
  • 값이 있을수도 없을수도 있는 Optional 생성하기
Optional<Car> gasDataOptional = Optional.ofNullable(getcarFromDB());

Optional 객체 사용하기 (값 받아오기)

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로 예외를 던지는데 익명함수를 사용해 예외를 호출하고 있는 부분이다.)

post-custom-banner

0개의 댓글