StatementRUR
) for a specific period of time. Let's say for a month.statementRURList
method) with the offset
and limit
parameters, as well as the StatementListParameters
parameter, in which we set the filter (from such and such date to such and such) and the sorting order. That is, getting a list of statements for the month is already becoming a somewhat non-trivial task in implementation.statementRURList
method returns immediately 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 .
, !
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 .
, !
Source: https://habr.com/ru/post/267243/
All Articles