"이것이 자바다" 책으로 공부하다가 정리가 필요할 것 같아서 작성하게 되었다. 이 코드는 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 |