The final block to produce the StockUpdate items will be this:
Observable.merge(
settings.getMonitoredSymbols()
.switchMap(symbols -> {
String query = createQuery(symbols);
String env = "store://datatables.org/alltableswithkeys";
return createFinancialStockUpdateObservable
(yahooService, query, env);
}),
settings.getMonitoredKeywords()
.switchMap(keywords -> {
if (keywords.isEmpty()) {
return Observable.never();
}
String[] trackingKeywords =
keywords.toArray(new String[0]);
final FilterQuery filterQuery
= new FilterQuery()
.track(trackingKeywords)
.language("en");
return createTweetStockUpdateObservable
(configuration, trackingKeywords,
filterQuery);
}
)
)
Again, we can extract these blocks to simplify the flow and make it more explicit and readable.