elevne's Study Note
Java - Optional 본문
Stream 을 사용할 때 Optional, OptionalDouble, OptionalInt, OptionalLong 클래스를 사용할 수 있다. 이들은 저장하는 값의 타입만 다를 뿐 제공하는 기능은 거의 동일하다.
Method | Description |
isPresent() | 값이 저장되어 있는지 여부 |
orElse() | 값이 저장되어 있지 않을 경우 디폴트 값 지정 |
ifPresent() | 값이 저장되어 있을 경우 Consumer 에서 처리 |
컬렉션의 요소는 동적으로 추가되는 경우가 많은데, 가령 컬렉션의 여러 요소들을 통해 하나의 집계값을 산출하려 할 때 컬렉션의 요소가 추가되지 않아 저장된 요소가 없을 경우 NoSuchElementException 예외가 발생할 수 있다. 이럴 때 Optional 클래스들을 사용할 수 있다.
첫 번째로, Optional 객체를 얻어 isPresent() 메소드로 값의 존재 여부를 확인해볼 수 있다.
public static void main(String[] args) {
List<Integer> list = Arrays.asList(new Integer[]{1, 2, 3});
OptionalDouble optional = list.stream().mapToInt(Integer::intValue)
.average();
if (optional.isPresent()){
System.out.println(optional.getAsDouble());
}
}
두 번째로는 orElse() 메소드로 디폴트 값을 지정해놓는 방법이 있다.
public static void main(String[] args) {
List<String> list = Arrays.asList(new String[]{"1", "2", "4"});
double avg = list.stream().mapToInt(Integer::parseInt).filter(a -> a > 5)
.average().orElse(0.0);
System.out.println(avg);
}
세 번째로, ifPresent() 메소드로 평균값이 있을 경우에만 값을 이용하는 람다식을 실행하게끔 할 수 있다.
public static void main(String[] args) {
List<String> list = Arrays.asList(new String[]{"1", "2", "4"});
list.stream().mapToInt(Integer::parseInt)
.average().ifPresent(a -> System.out.println("Average: " + a));
}
Reference:
이것이 자바다
'Backend > Java' 카테고리의 다른 글
Java - Socket(TCP) (0) | 2023.05.25 |
---|---|
Java - Network, IP (0) | 2023.05.24 |
Java - 보조 스트림 (0) | 2023.05.21 |
Java - IO 입출력 (0) | 2023.05.20 |
Java - Stream (0) | 2023.05.19 |