Я попытаюсь быть более ясным, насколько смогу.
Я хочу зациклить элементы в списке, для каждого элемента в MAIN_LIST начать разработку.Разработка состоит из другого списка, SECOND_LIST, который должен быть зациклен.Когда вся обработка каждого элемента в SECOND_LIST завершена, начните делать то же самое со следующим элементом в MAIN_LIST.
Когда закончите разработку всех элементов в MAIN_LIST, возврат завершен.
ЗдесьЯ пытаюсь добиться этого, но я думаю, что есть лучший способ.
Спасибо за вашу помощь!
Метод, который зацикливает MAIN_LIST
public Completable checkGroupExpiration(List<CheckVersion.ServiceStatus> serviceStatusList) {
return Completable.create(emitter -> {
Observable.fromIterable(serviceStatusList)
.concatMapCompletable(serviceStatus -> {
return checkGroupExpiration(serviceStatus.service, serviceStatus.lastUpdate);
}).subscribe(new CompletableObserver() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onComplete() {
if (!emitter.isDisposed())
emitter.onComplete();
}
@Override
public void onError(Throwable e) {
if (!emitter.isDisposed())
emitter.onComplete();
}
});
});
}
Метод, зацикливающий SECOND_LIST
protected Completable checkGroupExpiration(String group, long ttl) {
return Completable.create(emitter -> {
readFile(MASTER_NOTE)
.map(s -> {
return new Gson().fromJson(s, MasterNote.class);
}).flatMapObservable(masterNote -> {
return Observable.fromIterable(masterNote.savedFiles.entrySet());
}).filter(stringCacheInfoEntry -> {
return stringCacheInfoEntry.getValue().group.equals(group) && stringCacheInfoEntry.getValue().ttl < ttl;
}).concatMapCompletable(stringCacheInfoEntry -> {
return getFile(stringCacheInfoEntry.getKey(), false)
.doOnSuccess(file -> {
String fileName = file.getName();
file.delete();
Log.d(TAG, "File deleted => " + fileName + " from group => " + group);
}).ignoreElement();
}).subscribe(new CompletableObserver() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onComplete() {
if (!emitter.isDisposed())
emitter.onComplete();
}
@Override
public void onError(Throwable e) {
if (!emitter.isDisposed())
emitter.onComplete();
}
});
});
}