File tree Expand file tree Collapse file tree 2 files changed +56
-0
lines changed
src/main/java/org/gitlab4j/api Expand file tree Collapse file tree 2 files changed +56
-0
lines changed Original file line number Diff line number Diff line change 77import java .util .List ;
88import java .util .NoSuchElementException ;
99import java .util .stream .Stream ;
10+ import java .util .stream .StreamSupport ;
1011
1112import javax .ws .rs .core .MultivaluedMap ;
1213import javax .ws .rs .core .Response ;
@@ -333,4 +334,12 @@ public Stream<T> stream() throws GitLabApiException {
333334
334335 return (streamBuilder .build ());
335336 }
337+
338+ public Stream <T > lazyStream () {
339+ // Make sure that current page is 0, this will ensure the whole list is streamed
340+ // regardless of what page the instance is currently on.
341+ currentPage = 0 ;
342+
343+ return StreamSupport .stream (new PagerSpliterator <T >(this ), false );
344+ }
336345}
Original file line number Diff line number Diff line change 1+ package org .gitlab4j .api ;
2+
3+ import java .util .Iterator ;
4+ import java .util .Spliterator ;
5+ import java .util .function .Consumer ;
6+
7+ class PagerSpliterator <T > implements Spliterator <T > {
8+
9+ private Pager <T > pager ;
10+
11+ private Iterator <T > elements ;
12+
13+ PagerSpliterator (Pager <T > pager ) {
14+ this .pager = pager ;
15+ if (pager .hasNext ()) {
16+ elements = this .pager .next ().iterator ();
17+ }
18+ }
19+
20+ @ Override
21+ public boolean tryAdvance (Consumer <? super T > action ) {
22+ if (elements .hasNext ()) {
23+ action .accept (elements .next ());
24+ return true ;
25+ } else if (pager .hasNext ()) {
26+ elements = pager .next ().iterator ();
27+ action .accept (elements .next ());
28+ return true ;
29+ }
30+ return false ;
31+ }
32+
33+ @ Override
34+ public Spliterator <T > trySplit () {
35+ return null ;
36+ }
37+
38+ @ Override
39+ public long estimateSize () {
40+ return pager .getTotalItems ();
41+ }
42+
43+ @ Override
44+ public int characteristics () {
45+ return 0 ;
46+ }
47+ }
You can’t perform that action at this time.
0 commit comments