RxJava_06 [전송 프로세스의 조건 및 조합 연산] 내용에 대한 심층 설명
이 튜토리얼은 RxJava1을 기반으로 합니다. >다음 일련의 함수는 전송된 데이터가 충족되는지 확인하는 데 사용됩니다. 특정 조건.
all - Observable에서 방출된 모든 데이터가 특정 조건을 충족하는지 확인합니다. 원본 Observable의 데이터가 조건을 충족하지 않으면 False가 반환됩니다.-
- Contains - Observable이 특정 값을 방출하는지 여부를 결정합니다.
- DefaultIfEmpty - 원래 Observable이 방출하지 않은 경우 원래 Observable에서 값을 방출합니다. 모든 값, 기본값 방출
- SequenceEqual - 두 Observable이 동일한 데이터 시퀀스를 방출하는지 확인
- SkipUntil - SkipUntil은 원래 Observable을 구독합니다. , 그러나 이미터를 무시합니다. 두 번째 Observable이 항목을 방출하는 순간까지 원래 Observable을 방출하기 시작합니다.
- SkipWhile - SkipWhile은 원래 Observable을 구독하지만 이미터를 무시합니다. 지정한 특정 조건이 거짓이 되는 순간, 원래 Observable을 방출하기 시작합니다.
- TakeUntil - 두 번째 Observable 대신 조건자 함수를 사용하여 내보낸 데이터를 종료해야 하는지 여부를 결정합니다. takeWhile과 유사하게 동작합니다.
- TakeWhile - TakeWhile은 지정한 특정 조건이 true가 아닐 때까지 원본 Observable을 방출합니다. 이 시점에서 원본 Observable 방출을 중지하고 자체 Observable을 종료합니다.
- 1.all
rree
학교에 등록할 때 20세 이하여야 공부할 수 있습니다. 방법은 all 함수를 사용하여 판단할 수 있습니다.private ArrayList<Student> initStudents() { ArrayList<Student> persons = new ArrayList<>(); persons.add(new Student("张三", 16)); persons.add(new Student("李四", 21)); persons.add(new Student("王二麻子", 18)); return persons; }
Observable<Student> observable = Observable.from(initStudents());
Observable<Boolean> booleanObservable =
observable.all(new Func1<Student, Boolean>() {
//设置判断规则
@Override
public Boolean call(Student student) {
return student.age<20;
}
});
booleanObservable.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
//这里打印了false 因为学生里面李四21岁
Log.i(TAG, "call: "+aBoolean);
}
});
로그인 후 복사
3.Contains 원래 Observable이 해당 값을 내보내면 반환되는 Observable은 true를 내보내고, 그렇지 않으면 false를 내보냅니다. Observable<Student> observable = Observable.from(initStudents()); Observable<Boolean> booleanObservable = observable.all(new Func1<Student, Boolean>() { //设置判断规则 @Override public Boolean call(Student student) { return student.age<20; } }); booleanObservable.subscribe(new Action1<Boolean>() { @Override public void call(Boolean aBoolean) { //这里打印了false 因为学生里面李四21岁 Log.i(TAG, "call: "+aBoolean); } });
Observable<String> o1 = Observable.just("a", "b", "c");
Observable<String> o2 = Observable.just("d", "f", "e");
//判断上面的2个被观察者对象哪个先发送数据 发送数据慢的被观察者将被忽略
Observable<String> observable = Observable.amb(o2,o1);
observable.subscribe(new Action1<String>() {
@Override
public void call(String s) {
Log.i(TAG, "call: "+s);
}
});
로그인 후 복사
4.DefaultIfEmptyDefaultIfEmpty는 원래 Observable의 값을 정확하게 내보냅니다. 원래 Observable이 데이터를 내보내지 않고 정상적으로(onCompletedd 형식으로) 종료되면 Observable이 반환됩니다. by DefaultIfEmpty는 사용자가 제공한 기본값을 내보냅니다. Observable<String> o1 = Observable.just("a", "b", "c"); Observable<String> o2 = Observable.just("d", "f", "e"); //判断上面的2个被观察者对象哪个先发送数据 发送数据慢的被观察者将被忽略 Observable<String> observable = Observable.amb(o2,o1); observable.subscribe(new Action1<String>() { @Override public void call(String s) { Log.i(TAG, "call: "+s); } });
Observable<String> o1 = Observable.just("a", "b", "c");
Observable<Boolean> observable = o1.contains("a");
observable.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
//true
Log.i(TAG, "call: "+aBoolean);
}
}
로그인 후 복사
Observable<String> o1 = Observable.just("a", "b", "c"); Observable<Boolean> observable = o1.contains("a"); observable.subscribe(new Action1<Boolean>() { @Override public void call(Boolean aBoolean) { //true Log.i(TAG, "call: "+aBoolean); } }
예를 들어 관찰자가 네트워크 요청에 접근하면 백그라운드 서버는 반환 데이터를 반환하지 않고 대신 기본 데이터를 사용할 수 있습니다.
5.SequenceEqual
두 Observable이 동일한 데이터 시퀀스를 내보내는지 여부를 결정합니다. 두 Observable이 동일한 경우(동일한 데이터, 동일한 순서, 동일한 종료 상태), true를 내보내고, 그렇지 않으면 false를 방출합니다.Observable<String> o1 = Observable
.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
//这里没有发送任何onNext事件,而是调用onCompleted()事件
subscriber.onCompleted();
}
});
//如果上面的o1不发送任何onNext而结束 则发送一个默认的值d
Observable<String> o2 = o1.defaultIfEmpty("d");
o2.subscribe(new Action1<String>() {
@Override
public void call(String s) {
//打印d
Log.i(TAG, "call: "+s);
}
});
로그인 후 복사
6.1 SkipUntilSkipUntil은 원본 Observable을 구독하지만 두 번째 Observable이 원본 Observable을 방출하기 시작할 때 데이터 항목을 방출할 때까지 해당 방출자를 무시합니다. Observable<String> o1 = Observable .create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { //这里没有发送任何onNext事件,而是调用onCompleted()事件 subscriber.onCompleted(); } }); //如果上面的o1不发送任何onNext而结束 则发送一个默认的值d Observable<String> o2 = o1.defaultIfEmpty("d"); o2.subscribe(new Action1<String>() { @Override public void call(String s) { //打印d Log.i(TAG, "call: "+s); } });
Observable<Integer> o1 = Observable.just(1,2,3);
Observable<Integer> o2 = Observable.just(1,2,3);
Observable<Boolean> observable = Observable.sequenceEqual(o1, o2);
observable.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
Log.i(TAG, "call: "+aBoolean);
}
});
로그인 후 복사
출력: Observable<Integer> o1 = Observable.just(1,2,3); Observable<Integer> o2 = Observable.just(1,2,3); Observable<Boolean> observable = Observable.sequenceEqual(o1, o2); observable.subscribe(new Action1<Boolean>() { @Override public void call(Boolean aBoolean) { Log.i(TAG, "call: "+aBoolean); } });
Observable<Integer> o1 = Observable.just(1,2,3); Observable<Integer> o2 = o1.skipUntil(Observable.create(new Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> subscriber) { //如果不发送如下信息 则上面的1,2,3都不会发送 //如果发送了4 则直接发送1,2,3 但是4 5并没有发送 subscriber.onNext(4); subscriber.onNext(5); } })); o2.subscribe(new Action1<Integer>() { @Override public void call(Integer value) { Log.i(TAG, "call: "+value); } });
call: 1
call: 2
call: 3
로그인 후 복사
출력: call: 1 call: 2 call: 3
Observable<Integer> o1 = Observable.just(1,2,3,4,5,6); Observable<Integer> o2 = o1.skipWhile(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer value) { //直到发送的数据"等于"4 才开始从4发送数据 这里打印4,5,6 return value!=4; } }); o2.subscribe(new Action1<Integer>() { @Override public void call(Integer value) { Log.i(TAG, "call: "+value); } });
call: 4
call: 5
call: 6
로그인 후 복사
위 코드는 다음과 유사합니다: call: 4 call: 5 call: 6
Observable<Integer> o1 = Observable.just(1,2,3,4,5,6); Observable<Integer> o2 = o1.takeUntil(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer value) { //发送数据直到等于4才停止发送 return value==4; } }); o2.subscribe(new Action1<Integer>() { @Override public void call(Integer value) { Log.i(TAG, "call: "+value); } });
ArrayList<Integer> datas=new ArrayList<>();
for (int i = 1; i <= 6 ; i++) {
datas.add(i);
}
int index=0;
while(datas.get(index)<=4){
Log.i(TAG, "onCreate: "+datas.get(index));
index++;
}
로그인 후 복사
위 코드는 다음 while 문과 비슷하게 1~4를 출력합니다. ArrayList<Integer> datas=new ArrayList<>(); for (int i = 1; i <= 6 ; i++) { datas.add(i); } int index=0; while(datas.get(index)<=4){ Log.i(TAG, "onCreate: "+datas.get(index)); index++; }
Observable<Integer> o1 = Observable.just(1,2,3,4,5,6); Observable<Integer> o2 = o1.takeWhile(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer integer) { //发送数据 直到发送的数据等于才停止发送 return integer!=5; } }); o2.subscribe(new Action1<Integer>() { @Override public void call(Integer value) { Log.i(TAG, "call: "+value); } });
아래 표시된 함수는 여러 Observable을 결합하는 데 사용할 수 있습니다.
Merge - 여러 Observable의 방출을 인터리브 병합
- StartWith - 데이터 시퀀스의 시작 부분에 지정된 항목을 삽입합니다.
- Zip - 함수에서 제공하는 규칙에 따라 두 관측 가능 항목의 배출 데이터를 병합합니다. 총 배출 데이터 수는 관측 가능한 최소 배출 수를 기준으로 합니다.
- 8.Merge
ArrayList<Integer> datas=new ArrayList<>(); for (int i = 1; i <= 6 ; i++) { datas.add(i); } int index=0; while(datas.get(index)!=5){ Log.i(TAG, "onCreate: "+datas.get(index)); index++; }
Observable<Integer> odds = Observable.just(1, 3, 5).subscribeOn(someScheduler); Observable<Integer> evens = Observable.just(2, 4, 6); Observable.merge(odds, evens) .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."); } });
Observable<String> o1 = Observable.just("模拟网络请求"); Observable<String> o2 = o1.startWith("网络请求之前的准备工作"); o2.subscribe(new Action1<String>() { @Override public void call(String value) { Log.i(TAG, value); } });
输出:
网络请求之前的准备工作 模拟网络请求
类似的函数有:
Javadoc: startWith(Iterable))
Javadoc: startWith(T)) (最多接受九个参数)
Javadoc: startWith(Observable))
10.Zip
假设被观察者o1发送的数据为1 2 ,被观察者o2发送的数据为3,4,5。那么zip压缩发送的数据个数以最低个也就是2个为准。并且 新发送的每个数据以Func2的返回数据为准。
Javadoc: zip(Observable1,Observable2,Func2));
示例代码如下:
Observable<Integer> o1 = Observable.just(1,2); Observable<Integer> o2 = Observable.just(3,4,5); Observable<Integer> zipObservable = Observable .zip(o1, o2, new Func2<Integer, Integer, Integer>() { @Override public Integer call(Integer o, Integer o2) { return o + o2; } }); zipObservable.subscribe(new Action1<Integer>() { @Override public void call(Integer s) { Log.i(TAG, "call: "+s); } });
输出如下:
call: 4 // 1+3 call: 6 // 2+4
以上就是深入浅出RxJava_06[传输过程的条件&组合操作]的详情的内容,更多相关内容请关注PHP中文网(www.php.cn)!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.
