[java] RxJava의 스트림 연산

RxJava는 자바에서 사용되는 반응형 프로그래밍 라이브러리로, 스트림을 통해 비동기 이벤트 처리를 간편하게 할 수 있습니다. 이번 포스트에서는 RxJava에서 제공하는 스트림 연산에 대해 알아보겠습니다.

1. map 연산

map 연산은 스트림의 각 요소를 변환하는 역할을 합니다. 예를 들어, 정수 스트림을 받아 각 요소에 2를 곱하는 연산을 수행하려면 다음과 같이 map을 사용할 수 있습니다.

Observable.fromIterable(Arrays.asList(1, 2, 3, 4, 5))
    .map(number -> number * 2)
    .subscribe(result -> System.out.println(result));

위의 코드는 1부터 5까지의 정수를 갖는 스트림을 생성한 뒤, map 연산을 통해 각 요소에 2를 곱한 결과를 출력합니다.

2. filter 연산

filter 연산은 스트림의 요소를 조건에 따라 필터링하는 역할을 합니다. 예를 들어, 정수 스트림에서 짝수만을 출력하려면 다음과 같이 filter를 사용할 수 있습니다.

Observable.fromIterable(Arrays.asList(1, 2, 3, 4, 5))
    .filter(number -> number % 2 == 0)
    .subscribe(result -> System.out.println(result));

위의 코드는 1부터 5까지의 정수를 갖는 스트림을 생성한 뒤, filter 연산을 통해 짝수인 요소만을 출력합니다.

3. reduce 연산

reduce 연산은 스트림의 요소들을 하나로 합치는 역할을 합니다. 예를 들어, 정수 스트림의 모든 요소를 더하여 결과를 출력하려면 다음과 같이 reduce를 사용할 수 있습니다.

Observable.fromIterable(Arrays.asList(1, 2, 3, 4, 5))
    .reduce((x, y) -> x + y)
    .subscribe(result -> System.out.println(result));

위의 코드는 1부터 5까지의 정수를 갖는 스트림을 생성한 뒤, reduce 연산을 통해 모든 요소를 더한 결과를 출력합니다.

4. flatMap 연산

flatMap 연산은 스트림의 요소를 다른 스트림으로 변환하고 이를 하나의 스트림으로 병합하는 역할을 합니다. 예를 들어, 문자열 스트림을 받아 각 문자열을 단어로 분리하고 이를 병합하여 새로운 스트림으로 만들려면 다음과 같이 flatMap을 사용할 수 있습니다.

Observable.fromIterable(Arrays.asList("Hello World", "RxJava Stream"))
    .flatMap(sentence -> Observable.fromArray(sentence.split(" ")))
    .subscribe(result -> System.out.println(result));

위의 코드는 문자열 스트림을 생성한 뒤, 각 문자열을 공백 기준으로 분리하여 단어 스트림으로 변환하고 출력합니다.

결론

위에서 소개한 map, filter, reduce, flatMap과 같은 스트림 연산을 사용하면 RxJava를 통해 간편하고 효율적으로 데이터를 처리할 수 있습니다. 이러한 연산들을 조합하여 원하는 기능을 구현할 수 있으며, RxJava의 다양한 기능을 활용하여 프로그래밍을 더욱 효율적으로 개발할 수 있습니다.

참고 자료