> Java > java지도 시간 > RxJava_04 [데이터 전송 필터링 작업] 기술에 대한 심층 설명

RxJava_04 [데이터 전송 필터링 작업] 기술에 대한 심층 설명

黄舟
풀어 주다: 2017-03-04 09:49:10
원래의
1557명이 탐색했습니다.

이 튜토리얼은 RxJava1을 기반으로 합니다. >관찰자가 관찰자에게 데이터를 보낼 때 데이터 전송 중에 데이터를 추가로 필터링해야 할 수도 있습니다. 다음 튜토리얼에서는 대부분의 필터링 작업에 대한 기능을 다룹니다.
고유 - 전송된 중복 데이터 제거

    필터 - 조건에 따라 특정 데이터 필터링
  1. First - 전송 큐의 첫 번째 데이터 가져오기
  2. Last - 전송 큐의 마지막 데이터 가져오기
  3. ElementAt - 인덱스에 따라 대기열의 특정 데이터 보내기
  4. Take - 대기열에 있는 데이터의 처음 n 항목 가져오기
  5. TakeLast - 대기열의 마지막 n 항목 가져오기 data in the queue
  6. Sample - 보낸 데이터를 기준으로 시간 샘플을 전송하여 보냅니다.
  7. IgnoreElements - 보낸 데이터 대기열을 무시합니다.
  8. 1.Distinct
  9. 이제 수업이 있고, 학생 정보가 학생 시스템에 입력되었습니다. 동일한 데이터가 반복되는 것으로 나타났습니다. 학생 데이터 대기열은 다음과 같습니다.

    private ArrayList<Student> initPersons() {
        ArrayList<Student> persons = new ArrayList<>();
        persons.add(new Student("张三", 16));
        persons.add(new Student("李四", 17));
        persons.add(new Student("王二麻子", 18));
        persons.add(new Student("张三", 22));
        return persons;
    }
    로그인 후 복사
  10. 현재 필요한 것은 이름이 중복된 개체를 가로채는 것입니다. 그리고 인쇄하세요:
Observable
    .from(initPersons())
    //过滤重复名字的项
    .distinct(new Func1<Student, String>() {
        @Override
        public String call(Student student) {
            return student.name;
        }
    })
    .subscribe(new Action1<Student>() {
        @Override
        public void call(Student student) {
            Log.i(TAG, "call: "+student);
        }
    });
로그인 후 복사

출력은 다음과 같습니다:

IT520: call: Student{name=&#39;张三&#39;, age=16}
IT520: call: Student{name=&#39;李四&#39;, age=17}
IT520: call: Student{name=&#39;王二麻子&#39;, age=18}
로그인 후 복사

2.Filter

전달된 데이터에서 반복되는 부분을 필터링하는 것 외에도 다음과 같은 작업을 수행할 수 있습니다. 필터를 사용하여 규칙에 따라 특정 부분을 지울 수 있습니다.

다음 코드에서 보낸 데이터는 12345입니다. 필터링 규칙은 데이터 막대가 4보다 작아야 한다는 것입니다. 샘플 코드는 다음과 같습니다.

Observable.just(1, 2, 3, 4, 5)
      .filter(new Func1<Integer, Boolean>() {
          @Override
          public Boolean call(Integer item) {
            return( item < 4 );
          }
      })
      .subscribe(new Subscriber<Integer>() {
            @Override
            public void onNext(Integer item) {
                System.out.println("Next: " + item);
            }

            @Override
            public void onError(Throwable error) {
                System.err.println("Error: " + error.getMessage());
            }

            @Override
            public void onCompleted() {
                System.out.println("Sequence complete.");
            }
        });
로그인 후 복사

출력

Next: 1
Next: 2
Next: 3
Sequence complete.
로그인 후 복사

3.첫 번째

전송된 데이터 대기열이 첫 번째 항목만 보내도록 하려면 이 함수를 호출하세요.

샘플 코드

Observable.just(1, 2, 3)
      .first()
      .subscribe(new Subscriber<Integer>() {
    @Override
    public void onNext(Integer item) {
        System.out.println("Next: " + item);
    }

    @Override
    public void onError(Throwable error) {
        System.err.println("Error: " + error.getMessage());
    }

    @Override
    public void onCompleted() {
        System.out.println("Sequence complete.");
    }
});
로그인 후 복사

Output

Next: 1
Sequence complete.
로그인 후 복사

이 함수는 대기열에 보내는 과정에서 사용됩니다. null인 경우 첫 번째 항목에 도달하지 못한 경우 기본값이 전송됩니다.

4.Last

전송된 데이터 큐의 마지막 항목만 전송하려면 이 함수를 호출하세요. 샘플 코드

Observable.just(1, 2, 3)
      .last()
      .subscribe(new Subscriber<Integer>() {
    @Override
    public void onNext(Integer item) {
        System.out.println("Next: " + item);
    }

    @Override
    public void onError(Throwable error) {
        System.err.println("Error: " + error.getMessage());
    }

    @Override
    public void onCompleted() {
        System.out.println("Sequence complete.");
    }
});
로그인 후 복사

출력

Next: 3
Sequence complete.
로그인 후 복사

유사 함수에는 lastOrDefault(T)

5.ElementAt

<🎜가 포함됩니다. > ElementAt 연산자는 원본 Observable이 내보낸 데이터 시퀀스의 지정된 인덱스 위치에서 데이터 항목을 얻은 다음 이를 고유한 데이터로 내보냅니다.

음수를 전달하거나 원본 Observable의 데이터 항목 수가 index+1보다 적으면 IndexOutOfBoundsException이 발생합니다.

샘플 코드는 다음과 같습니다:

Observable.just(1, 2, 3, 4, 1, 4)
    .elementAt(3)
    .subscribe(new Action1<Integer>() {
        @Override
        public void call(Integer value) {
            Log.i(TAG, "call: " + value);
        }
    });
로그인 후 복사

Output

com.m520it.rxjava I/IT520: call: 4
로그인 후 복사

6.Take

Take 연산자를 사용하면 Observable의 동작을 수정할 수 있습니다. 이전 N개의 데이터만 반환하고 나머지 데이터는 무시하고 완료 알림을 전송합니다.

예제 코드

Observable.just(1, 2, 3, 4, 5, 6, 7, 8)
      .take(4)
      .subscribe(new Subscriber<Integer>() {
            @Override
            public void onNext(Integer item) {
                System.out.println("Next: " + item);
            }

            @Override
            public void onError(Throwable error) {
                System.err.println("Error: " + error.getMessage());
            }

            @Override
            public void onCompleted() {
                System.out.println("Sequence complete.");
            }
        });
로그인 후 복사

Output

Next: 1
Next: 2
Next: 3
Next: 4
Sequence complete.
로그인 후 복사

7.TakeLast

원래 Observable을 수정하려면 TakeLast 연산자를 사용하세요. Observable의 방출 항목 데이터, 이전 데이터를 무시합니다.

샘플 코드

Observable.just(1, 2, 3, 4, 5, 6, 7, 8)
      .takeLast(4)
      .subscribe(new Subscriber<Integer>() {
            @Override
            public void onNext(Integer item) {
                System.out.println("Next: " + item);
            }

            @Override
            public void onError(Throwable error) {
                System.err.println("Error: " + error.getMessage());
            }

            @Override
            public void onCompleted() {
                System.out.println("Sequence complete.");
            }
        });
로그인 후 복사

출력

Next: 5
Next: 6
Next: 7
Next: 8
Sequence complete.
로그인 후 복사

8.Sample

전송된 데이터를 특정 주파수로 샘플링하여 전송

Observable
        .interval(1000, TimeUnit.MILLISECONDS)//每秒发送1个数字
        .sample(2000,TimeUnit.MILLISECONDS)//每2秒采样一次
        .subscribe(new Action1<Long>() {
            @Override
            public void call(Long aLong) {
                Log.i(TAG, "call: "+aLong);
            }
        });
로그인 후 복사

위의 코드는 0, 2, 4, 6, 8을 인쇄합니다. . . .

9.IgnoreElements

Observable이 내보낸 데이터에 관심이 없지만 Observable이 완료되거나 오류로 종료될 때 알림을 받고 싶다면, Observable은 관찰자의 onNext() 메소드가 절대 호출되지 않도록 보장합니다.

Observable.just(1, 2, 3, 4, 1)
            .ignoreElements()//不发送任何信息 直接发送onCompleted()
            .subscribe(new Subscriber<Integer>() {
                @Override
                public void onCompleted() {
                    Log.i(TAG, "onCompleted: ");
                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onNext(Integer integer) {
                    Log.i(TAG, "onNext: "+integer);
                }
            });
로그인 후 복사
위 내용은 RxJava_04 [데이터 전송 필터링 연산] 기술에 대한 심층 소개입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(m.sbmmt.com)를 참고해주세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿