List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50

, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50
, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50

, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50
, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50

, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50

, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50
, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50

, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50
, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50

, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50
, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50

, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50
, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50

, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50
, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50

, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50
, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50

, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !
List.
:
int i = 0; List<StatementRUR> commonList = new ArrayList<>(); while (true) { List<StatementRUR> list = statementRURList(int i * limit, int limit, String accountId, int periodDaysCount, Date docInfoDocDate); commonList.addAll(list); if (list.size() < limit) { break; } i++; }
.
, UI , , , . , . .
", " . RxJava - , !
, .
RetroFit. , Rx. :
Observable<ResponseApiModel<List<StatementRUR>>> statementRURList (int offset, int limit, String accountId, int periodDaysCount, Date docInfoDocDate);
, ResponseApiModel
- , .
:
public class ResponseApiModel<T> { @SerializedName("result") private T result; @SerializedName("errors") private List<ErrorResponseApiModel> errors; @SerializedName("state") private Object state; public ResponseApiModel(T result, List<ErrorResponseApiModel> errors) { this.result = result; this.errors = errors; } public ResponseApiModel(T result, List<ErrorResponseApiModel> errors, Object state) { this.result = result; this.errors = errors; this.state = state; } public ResponseApiModel(List<ErrorResponseApiModel> errors, Object state) { this.errors = errors; this.state = state; } /** * if result == null && errors != null -> throw new ResponseAPIException! * @return result field */ public T getResult() { if (result == null && errors != null) { throw new ResponseAPIException(errors); } return result; } public List<ErrorResponseApiModel> getErrors() { return errors; } public Object getState() { return state; } }
T result
, . errors
, T getResult()
ResponseAPIException
, Subscriber.onError(Throwable e)
String accountId, int periodDaysCount, Date docInfoDocDate
StatementListParameters
, .
List ( T result
).
! Rx?
.
: 160 , LIMIT = 50

, ( i
).
range . :
Observable.range(0, Integer.MAX_VALUE - 1)
Observable
"" . : 0, 1, 2, 3...Integer.MAX_VALUE - 1
. , - statementRURList
. . RetroFit ( ) .
concatMap . , Observable
, Observable
, "" . concatMap flatMap , Observable
, . , , , Observable
.
:) , (" ", Stream)
:
Observable // get All statements from current date for periodDaysCount (with offset, limit) .range(0, Integer.MAX_VALUE - 1) .concatMap(new Func1<Integer, Observable<ResponseApiModel<List<StatementRUR>>>>() { @Override public Observable<ResponseApiModel<List<StatementRUR>>> call(Integer increment) { return statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate); } } );
- , ? lambda? :
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate));
:)
Observable
"" ResponseApiModel<List>. , , T result
ResponseApiModel
. result
T getResult()
. , Observable
. map .
. .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(new Func1<ResponseApiModel<List<StatementRUR>>, List<StatementRUR>>() { @Override public List<StatementRUR> call(ResponseApiModel<List<StatementRUR>> listResponseApiModel) { return listResponseApiModel.getResult(); } } );
RetroLambda
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult);
( offset
) . - .
, limit
, .
takeUntil , . , observable
.
? . .
:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(new Func1<List<StatementRUR>, Boolean>() { @Override public Boolean call(List<StatementRUR> list) { return list.size() < LIMIT; } } );
RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT);
. observable
"" , ( - ). . toList , "" , , map , .
. .
. RetroLambda:
Observable .range(0, Integer.MAX_VALUE - 1) .concatMap(increment -> statementRURList(LIMIT * increment, LIMIT, accountId, periodDaysCount, docInfoDocDate)) .map(ResponseApiModel::getResult) .takeUntil(list -> list.size() < LIMIT) .toList() .map(this::safeMerge); private <T> List<T> safeMerge(List<List<T>> lists) { List<T> list = new ArrayList<>(); for (List<T> statementOperationRURList : lists) { list.addAll(statementOperationRURList); } return list; }
, Rx " " , "" scan . toList map ? , , ( ), scan :
java.util.NoSuchElementException: Sequence contains no elements at rx.internal.operators.OperatorSingle$ParentSubscriber.onCompleted(OperatorSingle.java:131) at rx.internal.operators.OperatorTakeLastOne$ParentSubscriber.onCompleted(OperatorTakeLastOne.java:106) at rx.internal.operators.OperatorScan$2.onCompleted(OperatorScan.java:123) at rx.observers.SerializedObserver.onCompleted(SerializedObserver.java:99) at rx.observers.SerializedSubscriber.onCompleted(SerializedSubscriber.java:65) at rx.internal.operators.OperatorConcat$ConcatSubscriber.subscribeNext(OperatorConcat.java:171) ...
, , .
. , .
, , - , . , . .
, , . , RX . Rx .
, !