private static ArrayList initStudents() {
ArrayList<Student> persons = new ArrayList<>();
persons.add(new Student("张三", 17));
persons.add(new Student("张三", 22));
persons.add(new Student("李四", 18));
persons.add(new Student("王五", 19));
return persons;
}
public static class Student {
public String name;
public int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public static void test10() {
Observable
.from(initStudents())
.distinct(new Func1<Student, String>() {
@Override
public String call(Student o) {
return o.name;
}
})
.subscribe(new Action1() {
@Override
public void call(Object o) {
Log.e("TAG", "call :" + o);
}
});
}
2.Filter方法过滤指定条件的数据public static void test9() {
// 需求:从1打印到9大于5的数字
Observable
.range(1, 9)
.filter(new Func1<Integer, Boolean>() {
@Override
public Boolean call(Integer integer) {
return integer > 5;
}
})
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
Log.e("TAG", "call: " + integer);
}
});
}
3.获取队列中某些数据First&Last&ElementAt public static void test10() {
Observable
.from(initStudents())
.distinct(new Func1<Student, String>() {
@Override
public String call(Student o) {
return o.name;
}
})
//.first()// 获取第一个元素
//.last() // 获取最后一个元素
.elementAt(1)// 指定索引位置(索引越界就会报出异常)
.subscribe(new Action1() {
@Override
public void call(Object o) {
Log.e("TAG", "call :" + o);
}
});
}
4.获取指定集合的数据Take&TakeLastpublic static void test11() {
// 获取队列前三个元素
Observable
.from(initStudents())
//.take(3)//获取队列的前三个元素
.takeLast(2) // 获取最后的n个元素
.subscribe(new Action1() {
@Override
public void call(Object o) {
Log.e("TAG", "call :" + o);
}
});
}
5.Sample&IgnoreElements使用较少 public static void test12() {
// Observable.interval(1000, TimeUnit.MILLISECONDS)//每秒发送1个数字
// .sample(2000, TimeUnit.MILLISECONDS)//每2秒采样一次
// .subscribe(new Action1<Long>() {
// @Override
// public void call(Long aLong) {
// Log.e("TAG", "call: " + aLong);
// }
// });
Observable.just(1,2,3,4,1)
.ignoreElements()// 不发送消息,直接发送onCompleted()
.subscribe(new Subscriber<Integer>() {
@Override
public void onCompleted() {
Log.e("TAG", "onCompleted: ");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Integer integer) {
Log.e("TAG", "ontext: "+integer);
}
});
}