使用Observables RxJava进行文件验证

时间:2016-05-10 14:31:58

标签: java rx-java reactive-programming

我正在尝试使用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

我几乎被困在这一点上,任何人都可以帮助或指出我正确的方向吗?

1 个答案:

答案 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);
            }
        });