xJava기록 - 리액티브 연산자 (2)
1. filter() 함수
- Observable에서 원하는 데이터만 걸러내는 역할
String[] objs = {"1 CIRCLE", "2 DIAMOND", "3 TRIANGLE", "4 DIAMOND",
"5 CIRCLE", "6 HEXAGON"};
Observable<String> source = Observable.fromArray(objs)
.filter(obj -> obj.endsWith("CIRCLE));
source.subscribe(System.out::println);
//출력값
1 CIRCLE
2 CIRCLE
👉🏻 CIRCLE로 끝나는 값만 출력
🐥filter() 함수와 비슷한 함수들
- first(default) 함수 : Observable의 첫 번째 값을 필터, 만약 값 없이 완료되면 기본값 리턴
- last(default) 함수 : Observable의 마지막 값을 필터, 만약 값 없이 완료되면 기본값 리턴
- take(N) 함수 : 최초 N개 값만 가져옴
- takeLast(N) 함수 : 마지막 N개 값만 필터함
- skip(N) 함수 : 최초 N개 값을 건너뜀
- skipLast(N) 함수 : 마지막 N개 값을 건너뜀
reduce() 함수
- 발행한 데이터를 모두 사용하여 어떤 최종 결과 데이터를 합성할 때 활용
String[] balls = {"red", "green", "blue"}
Maybe<String> source = Observable.fromArray(balls)
.reduce((ball1, ball2) -> ball2 + "(" + ball1 + ")";
source.subscribe(System.out::println);
//결과값
blue(green(red))
- reduce() 함수를 호출하면 인자로 넘긴 람다 표현식에 의해 결과 없이 완료 될 수 있어
Maybe
객체로 리턴
ex) 데이터 쿼리하기
- 전체 매출 데이터를 입력
- 매출 데이터 중 TV 매출을 필터링
- TV 매출의 합을 구함
List<Pair<String,Integer>> sales = new ArrayList<>();
sales.add(Pair.of("TV", 2500));
sales.add(Pair.of("Camera", 300));
sales.add(Pair.of("TV", 1600));
sales.add(Pair.of("Phone", 800)));
Maybe<Integer> tvSales = Observable.fromIterable(sales)
.filter(sale -> "TV".equals(sale.getLeft()))
.map(sale -> sale.getRight())
.reduce((sale1, sale2) -> sale1 + sale2);
tvSales.subscribe(tot -> System.out.println("TV Sales: $" + tot));
👉🏻 reduce()를 사용하기 위해 Maybe로 선언
👉🏻filter()
를 이용하여 TV 목록을 조회하고 map()
을 이용해 값을 가져오고 reduce()
를 통해 합계를 구함
*getLeft()와 getRight()는 pair 클래스에서 왼쪽값과 오른쪽 값을 얻어오기 위해 호출
Author And Source
이 문제에 관하여(xJava기록 - 리액티브 연산자 (2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ddyy094/RxJava기록-리액티브-연산자-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)