산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

Java 9 Optional 클래스 새로운 기능으로 기능 강화

Optional 클래스는 null 체크와 NullPointerException 문제를 피하기 위해 Java 8에 도입되었습니다. Java 9에서는 기능을 개선하기 위해 세 가지 새로운 메서드가 추가되었습니다.

stream() 메서드

구문

public Stream<T> stream()

값이 있으면 해당 값만 포함하는 순차 스트림을 반환하고, 그렇지 않으면 빈 스트림을 반환합니다.

예제

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Tester {
    public static void main(String[] args) {
        List<Optional<String>> list = Arrays.asList(
            Optional.empty(), Optional.of("A"), Optional.empty(), Optional.of("B"));
        
        // Java 8 방식: flatMap으로 필터링
        List<String> filteredList = list.stream()
            .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
            .collect(Collectors.toList());
        
        // Java 9: Optional::stream 메서드로 단순화
        List<String> filteredListJava9 = list.stream()
            .flatMap(Optional::stream)
            .collect(Collectors.toList());
        
        System.out.println(filteredList);
        System.out.println(filteredListJava9);
    }
}

출력

[A, B]
[A, B]

ifPresentOrElse() 메서드

구문

public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)

값이 있으면 주어진 액션을 값과 함께 수행하고, 그렇지 않으면 주어진 빈 액션을 수행합니다.

예제

import java.util.Optional;

public class Tester {
    public static void main(String[] args) {
        Optional<Integer> optional = Optional.of(1);
        optional.ifPresentOrElse(
            x -> System.out.println("Value: " + x),
            () -> System.out.println("Not Present."));
        
        optional = Optional.empty();
        optional.ifPresentOrElse(
            x -> System.out.println("Value: " + x),
            () -> System.out.println("Not Present."));
    }
}

출력

Value: 1
Not Present.

or() 메서드

구문

public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)

값이 있으면 해당 값을 설명하는 Optional을 반환하고, 그렇지 않으면 공급 함수가 생성한 Optional을 반환합니다.

예제

import java.util.Optional;
import java.util.function.Supplier;

public class Tester {
    public static void main(String[] args) {
        Optional<String> optional1 = Optional.of("Mahesh");
        Supplier<Optional<String>> supplierString = () -> Optional.of("Not Present");
        
        optional1 = optional1.or(supplierString);
        optional1.ifPresent(x -> System.out.println("Value: " + x));
        
        optional1 = Optional.empty();
        optional1 = optional1.or(supplierString);
        optional1.ifPresent(x -> System.out.println("Value: " + x));
    }
}

출력

Value: Mahesh
Value: Not Present

java

  1. Java final 키워드 마스터: 변수, 메서드, 클래스에서의 활용
  2. Java instanceof 연산자 완벽 가이드: 기본 사용법부터 상속, 인터페이스까지
  3. Java 정적 중첩 클래스 이해: 용법, 내부 클래스와의 차이, 예제
  4. Java 익명 내부 클래스 마스터: 정의, 문법, 실전 예제
  5. Java 싱글톤 패턴 완벽 가이드: 안전하게 구현하고 사용하기
  6. Java 리플렉션 마스터: 런타임에 클래스, 메서드, 필드 검사 및 조작
  7. Java ObjectOutputStream 마스터하기: 직렬화, 메서드, 실전 예제
  8. Java 제네릭 마스터하기: 재사용 가능하고 타입 안전한 코드 작성
  9. java.io로 Java 파일 작업 마스터하기 – 생성, 읽기, 쓰기 및 삭제
  10. Java 9 스트림 API 개선: takeWhile 등 새로운 메서드