Optional객체에도 filter() map() flatMap()을 사용할 수 있다.
https://standout.tistory.com/1446
filter()
`Optional` 객체가 값이 존재할 때, 주어진 조건에 따라 값을 필터링.
조건을 만족하지 않으면 값이 없는 `Optional` 객체를 반환
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<Integer> optionalNumber = Optional.of(10);
// 값이 5보다 큰 경우에만 Optional을 반환하도록 필터링
Optional<Integer> filteredOptional = optionalNumber.filter(num -> num > 5);
System.out.println(filteredOptional); // 출력: Optional[10] (5보다 크므로 필터링 되지 않음)
}
}
map()
`map()` 메소드는 `Optional` 객체가 값을 포함할 때, 해당 값을 주어진 함수에 적용하여 새로운 값을 반환
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<String> optionalString = Optional.of("Hello");
// 문자열의 길이를 반환하는 함수를 적용하여 새로운 Optional을 반환
Optional<Integer> mappedOptional = optionalString.map(String::length);
System.out.println(mappedOptional); // 출력: Optional[5] ("Hello"의 길이는 5)
}
}
flatMap()
`flatMap()` 메소드는 `Optional` 객체에 중첩된 `Optional` 객체를 풀어내어 하나의 `Optional` 객체로 만든다.
일반적으로 `flatMap()`은 중첩된 `Optional`을 펼치는 데 사용됨.
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<Optional<String>> nestedOptional = Optional.of(Optional.of("Hello"));
// 중첩된 Optional을 풀어서 하나의 Optional로 만듦
Optional<String> flatMappedOptional = nestedOptional.flatMap(o -> o);
System.out.println(flatMappedOptional); // 출력: Optional[Hello]
}
}
외 값의 null여부에 따른 메소드를 활용할 수 있다.
isPresent()는 객체가 값을 포함하는지 확인하고 null이면 false를, 아니면 true를 반환한다.
ifPresent()는 Optional 값이 있는경우 출력한다.
findAny()는 임의의 요소를 찾아 출력하고 findFirst()는 첫 번째 요소를 찾고 해당 요소를 출력한다.
import java.util.Optional;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
// Optional 객체 초기화: 값이 있는 경우
Optional<String> optionalWithValue = Optional.of("Hello");
// Optional 객체 초기화: 값이 없는 경우
Optional<String> optionalEmpty = Optional.empty();
// Stream 객체 생성
Stream<String> stream = Stream.of("Apple", "Banana", "Orange");
// isPresent() 메소드를 사용하여 값이 있는지 확인하고 출력
System.out.println("Is optionalWithValue present? " + optionalWithValue.isPresent());
System.out.println("Is optionalEmpty present? " + optionalEmpty.isPresent());
// ifPresent() 메소드를 사용하여 값이 있는 경우 출력
optionalWithValue.ifPresent(value -> System.out.println("Value of optionalWithValue: " + value));
// findAny() 메소드를 사용하여 Stream에서 임의의 요소 찾기
Optional<String> anyElement = stream.findAny();
System.out.println("Any element in the stream: " + anyElement.orElse("Stream is empty"));
// findFirst() 메소드를 사용하여 Stream에서 첫 번째 요소 찾기
Stream<String> anotherStream = Stream.of("One", "Two", "Three");
Optional<String> firstElement = anotherStream.findFirst();
System.out.println("First element in the anotherStream: " + firstElement.orElse("Stream is empty"));
}
}
[출력결과]
Is optionalWithValue present? true
Is optionalEmpty present? false
Value of optionalWithValue: Hello
Any element in the stream: Apple
First element in the anotherStream: One
'JAVA' 카테고리의 다른 글
IntStream에서 값이 없는경우 사용한다: OptionalInt OptionalLong OptionalDouble (0) | 2024.03.12 |
---|---|
Optional<T>의 생성 of() ofNullable(), 초기화 empty(), 값 가져오기 get() orElse() (0) | 2024.03.12 |
Optional 객체가 값이 없을경우 대체값을 설정하기: orElse() orElseThrow() (0) | 2024.03.12 |
두 개의 스트림 합치기 concat() (0) | 2024.03.05 |
스트림 람다식을 이용한 임의의값 생성하기 iterate generate (0) | 2024.03.05 |