[JAVA]Optional 클래스

2025. 2. 10. 23:48·Language/JAVA

"이것이 자바다" 책으로 공부하다가 정리가 필요할 것 같아서 작성하게 되었다. 이 코드는 List<Integer> 타입의 리스트를 만들고, 이 리스트의 평균을 계산한다. 하지만 리스트가 비어 있는 경우 이를 안전하게 처리하는 방법을 3가지 사용하고 있다.

import java.util.ArrayList;
import java.util.List;
import java.util.OptionalDouble;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        
        //OptionalDouble을 이용한 평균 계산
        OptionalDouble optional = list.stream().mapToInt(Integer::intValue).average();
        if (optional.isPresent()) {
            System.out.println("평균: " + optional.getAsDouble());
        } else {
            System.out.println("평균: 0.0");
        }
        
        //orElse()를 이용한 기본값 처리
        double avg = list.stream().mapToInt(Integer::intValue).average().orElse(0.0);
        System.out.println("평균: " + avg);
        
        //ifPresent()를 이용한 값 출력
        list.stream().mapToInt(Integer::intValue).average()
            .ifPresent(a -> System.out.println("평균: " + a));
    }
}

1. isPresent()

OptionalDouble optional = list.stream()
.mapToInt(Integer::intValue) //Integer를 int로 변환(IntStream 생성)
.average();

if(optional.isPresent()) {
    System.out.println("평균: " + optional.getAsDouble()); //값이 있으면 출력
} else {
    System.out.println("평균: 0.0"); //값이 없으면 기본값 출력
}

OptionalDouble은 값이 있을 수도, 없을 수도 있는 컨테이너 객체이다. isPresent() 메서드는 OptionalDouble에 값이 존재하는지 확인하는 메서드로, true일 때만 값을 가져온다.

2. orElse()

double avg = list.stream().mapToInt(Integer::intValue).average().orElse(0.0);
System.out.println("평균: " + avg);

orElse(0.0) 메서드는 값이 존재하면 해당 값을 반환하고, 값이 없으면 기본값 0.0을 반환한다. 

3. ifPresent()

list.stream().mapToInt(Integer::intValue).average()
.ifPresent(a -> System.out.println("평균: " + a));

ifPresent(람다식) 메서드는 값이 존재하면 람다식을 실행하고, 없으면 아무것도 실행하지 않는다.

Integer::intValue

Integer::intValue는 Integer 클래스의 intValue() 메서드를 참조하는 방식이다.
n->n.intValue() 이 람다 표현식과 같은 동작을 하지만, 더 간결한 표현이 가능하다.

'Language > JAVA' 카테고리의 다른 글

[JAVA]public 클래스명과 파일명 일치 규칙  (0) 2025.04.22
[JAVA]reduce() 메서드  (0) 2025.02.14
[JAVA]IntStream  (0) 2025.02.09
[JAVA]내부 반복자 vs 외부 반복자  (0) 2025.02.05
[JAVA]String 클래스 메소드  (0) 2025.01.20
'Language/JAVA' 카테고리의 다른 글
  • [JAVA]public 클래스명과 파일명 일치 규칙
  • [JAVA]reduce() 메서드
  • [JAVA]IntStream
  • [JAVA]내부 반복자 vs 외부 반복자
yxxjxxeee
yxxjxxeee
  • yxxjxxeee
    공부 일지
    yxxjxxeee
  • 전체
    오늘
    어제
    • study N
      • Framework
        • Spring
      • Language
        • JavaScript
        • C | C++
        • JAVA
        • PHP
      • CS
        • 네트워크
        • 자료구조
        • 데이터베이스
        • 운영체제
      • DBMS
        • MySQL
      • 코딩테스트 N
        • 백준 N
        • 프로그래머스
        • LeetCode
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 쇼핑몰 제작 프로젝트(PHP)
    • github
  • 공지사항

  • 인기 글

  • 최근 글

  • hELLO Designed By 정상우
    Version v4.10.2
yxxjxxeee
[JAVA]Optional 클래스
상단으로

티스토리툴바