본문 바로가기
프로그래밍/JAVA

Java stream 의 Optional.orElseThrow

by 낭만프로그래머. 2024. 7. 28.

Java 스트림 API에서 orElseThrow 메서드는 Optional 클래스의 메서드 중 하나로, Optional 객체에 값이 없을 경우 예외를 던지는 방식으로 사용됩니다. 이 메서드를 사용하면 값이 없을 때 특정 예외를 던질 수 있어서 더 안전한 코드 작성을 도와줍니다. 이를 스트림과 함께 사용하여 값을 처리하고 예외를 던지는 방법을 설명하겠습니다.

 

import java.util.Optional;

public class Example {
    public static void main(String[] args) {
        Optional<String> optional = Optional.of("Hello, World!");

        String value = optional.orElseThrow(() -> new RuntimeException("No value present"));
        System.out.println(value);  // 출력: Hello, World!
    }
}
import java.util.Arrays;
import java.util.List;
import java.util.Optional;

public class StreamExample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("one", "two", "three", "four");

        String result = list.stream()
                .filter("five"::equals)
                .findFirst()
                .orElseThrow(() -> new RuntimeException("Element not found"));

        System.out.println(result);
    }
}

위 예제는 다음과 같은 과정을 거칩니다:

  1. list에서 스트림을 생성합니다.
  2. filter 메서드를 사용하여 조건을 만족하는 요소를 필터링합니다.
  3. findFirst 메서드를 사용하여 첫 번째 요소를 Optional로 반환합니다.
  4. orElseThrow를 사용하여 값이 없을 경우 지정된 예외를 던집니다.

만약 리스트에 "five"가 없다면 RuntimeException이 던져집니다.

 

CustomException 사용예제

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

class NoEvenNumberFoundException extends RuntimeException {
    public NoEvenNumberFoundException(String message) {
        super(message);
    }
}

public class StreamExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 3, 5, 7);

        Integer evenNumber = numbers.stream()
                .filter(num -> num % 2 == 0)
                .findFirst()
                .orElseThrow(() -> new NoEvenNumberFoundException("No even number found in the list"));

        System.out.println(evenNumber);
    }
}

'프로그래밍 > JAVA' 카테고리의 다른 글

Multi Datasource 를 이용한 database routing 전략  (0) 2024.07.06
Java Streams API - 3  (0) 2024.05.26
Java Streams API - 2  (0) 2024.05.26
Java Streams API - 1  (0) 2024.05.26