我正在尝试使用Rxjava解决经典文件验证过程。我有一个带有普通标题的CSV文件和另一个标题列表,我需要验证它们是否属于这些选定的数据类型或者值是否为空。
我使用普通的java实现了这个,但我想让我的验证代码更具反应性。这是我到目前为止所取得的成就。
String filePath = "/home/user/Documents/test.csv";
Path path = Paths.get(filePath);
Map<String,String> headerMap = new HashMap<>();
headerMap.put("feild11","String");
headerMap.put("feild10","String");
headerMap.put("feild9","Date");
headerMap.put("feild8","NOT-NULL");
// An map observalble which defines my valdiation rules
Observable<Map<String,String>> fieldsToValidae = Observable.just(headerMap);
Observable<String> fileObservalbe = RxFileReader.from(path);
// An observalbe which gives a list of headers
Observable<String> headers = fileObservalbe.first();
// An observalbe which gives me list of feild values
Observable<String> feildValues = fileObservalbe.skip(1);
这里我有3个observable在第一个实例(行)中进行组合和验证,验证失败。
以下是我想要使用的示例数据:
接头
姓|名字|性别| DOB | feild1 | feild2 | feild3 | feild4 | feild5 | feild6 | feild7 | feild8 | feild9 | feild10 | feild11
值:
Prakash | joshi | M | 11/25/2015 | a fdf f | adf | saf | asf | dfadf | sadf | | ASDF | asdfsdf | asdf | dfsfcded Prakash | joshi | M | 10/25/2015 | a fdf f | adf | saf | asf | dfadf | sadf | | asdf | asdfsdf | asdf | dfsfcded Prakash | joshi | M | 10/25/2015 | a fdf f | adf | saf | asf | dfadf | sadf | | ASDF | asdfsdf | ASDF | dfsfcded
我几乎被困在这一点上,任何人都可以帮助或指出我正确的方向吗?
答案 0 :(得分:1)
使用combineLatest运算符,传递内部标题和字段(据我所知,您将发出一个标题和许多字段),并在函数传递逻辑中进行数据验证
Observable<Result> validationResultObservable = Observable.combineLatest(headers, feildValues, new Func2<String, String, Result>() {
@Override
public Result call(String header, String field) {
// header always same
// field always new
// validate, create same kind of Result object or just a boolean
Log.i("TEST_IT", "validationResultObservable emitted: " + header + " - " + field);
return new Result(header, field);
}
});