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 7
7
import java .util .List ;
8
8
import java .util .NoSuchElementException ;
9
9
import java .util .stream .Stream ;
10
+ import java .util .stream .StreamSupport ;
10
11
11
12
import javax .ws .rs .core .MultivaluedMap ;
12
13
import javax .ws .rs .core .Response ;
@@ -333,4 +334,12 @@ public Stream<T> stream() throws GitLabApiException {
333
334
334
335
return (streamBuilder .build ());
335
336
}
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
+ }
336
345
}
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