反正比较简单,直接上例子了
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import rx.Observable;
import rx.Subscriber;
import rx.functions.Func1;
//参考:http://reactivex.io/documentation/operators.html
public class RxTest01 {
public static void main(String[] args) {
Observable<Object> observable = Observable.from(mockTable());
observable
//.filter(filter())
.subscribe(subscriber());
}
public static Func1<Object, Boolean> filter() {
return new Func1<Object, Boolean>() {
@Override
public Boolean call(Object arg0) {
int counter = 0; // just for test, mulithread need to use AtomicInteger
@SuppressWarnings("unchecked")
List<Object> row = (List<Object>) arg0;
Iterator<Object> rowItr = row.iterator();
while(rowItr.hasNext()) {
counter++;
Object value = (Object)rowItr.next();
if (counter == row.size()) { //only process amount
return ((Double)value > 3.0); //filter
}
}
return false;
}
};
}
public static Subscriber<Object> subscriber() {
return new Subscriber<Object>() {
@Override
public void onNext(Object arg0) {
@SuppressWarnings("unchecked")
List<Object> row = (List<Object>) arg0;
Iterator<Object> rowItr = row.iterator();
while(rowItr.hasNext()) {
Object value = (Object)rowItr.next();
System.out.print(value + " ");
}
System.out.println();
}
@Override
public void onCompleted() { System.out.println("~~Completed!"); }
@Override
public void onError(Throwable e) { System.out.println("~~Ouch!"); }
};
}
public static List<Object> mockTable() {
List<Object> tableA = new ArrayList<Object>();
List<Object> row1 = new ArrayList<Object>();
row1.add("01"); //id
row1.add("name1"); //name
row1.add(1.1); //amount
List<Object> row2 = new ArrayList<Object>();
row2.add("02");
row2.add("name2");
row2.add(2.2);
List<Object> row3 = new ArrayList<Object>();
row3.add("03");
row3.add("name3");
row3.add(3.3);
tableA.add(row1);
tableA.add(row2);
tableA.add(row3);
return tableA;
/*
01 name1 1.1
02 name2 2.2
03 name3 3.3
*/
}
}