본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

Optional객체에 중간연산자 사용하기: filter() map() flatMap() isPresent() ifPresent() findAny() findFirst()

Optional객체에도 filter() map() flatMap()을 사용할 수 있다.

https://standout.tistory.com/1446

 

스트림의 연산 - 중간연산 distinct, filter, limit, skip, peek sorted map mapToDouble mapToInt mapToLong flatMap flatma

앞서 스트림과 스트림의 연산에 대해 알아봤다. 데이터를 다듬는 스트림 중간연산의 종류에 대해 알아보자. https://standout.tistory.com/1445 스트림의연산, 중간 연산과 최종연산 스트림 데이터의 흐

standout.tistory.com

 

 

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