Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
佳 邓
Gitlab4j Api
Commits
0085d120
Commit
0085d120
authored
Feb 10, 2019
by
Mariusz Smykuła
Committed by
Greg Messner
Feb 09, 2019
Browse files
lazy streams with pager spliterator (#295) (#296)
parent
509d8580
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/main/java/org/gitlab4j/api/Pager.java
View file @
0085d120
...
@@ -7,6 +7,7 @@ import java.util.Iterator;
...
@@ -7,6 +7,7 @@ import java.util.Iterator;
import
java.util.List
;
import
java.util.List
;
import
java.util.NoSuchElementException
;
import
java.util.NoSuchElementException
;
import
java.util.stream.Stream
;
import
java.util.stream.Stream
;
import
java.util.stream.StreamSupport
;
import
javax.ws.rs.core.MultivaluedMap
;
import
javax.ws.rs.core.MultivaluedMap
;
import
javax.ws.rs.core.Response
;
import
javax.ws.rs.core.Response
;
...
@@ -333,4 +334,12 @@ public class Pager<T> implements Iterator<List<T>>, Constants {
...
@@ -333,4 +334,12 @@ public class Pager<T> implements Iterator<List<T>>, Constants {
return
(
streamBuilder
.
build
());
return
(
streamBuilder
.
build
());
}
}
public
Stream
<
T
>
lazyStream
()
{
// Make sure that current page is 0, this will ensure the whole list is streamed
// regardless of what page the instance is currently on.
currentPage
=
0
;
return
StreamSupport
.
stream
(
new
PagerSpliterator
<
T
>(
this
),
false
);
}
}
}
src/main/java/org/gitlab4j/api/PagerSpliterator.java
0 → 100644
View file @
0085d120
package
org.gitlab4j.api
;
import
java.util.Iterator
;
import
java.util.Spliterator
;
import
java.util.function.Consumer
;
class
PagerSpliterator
<
T
>
implements
Spliterator
<
T
>
{
private
Pager
<
T
>
pager
;
private
Iterator
<
T
>
elements
;
PagerSpliterator
(
Pager
<
T
>
pager
)
{
this
.
pager
=
pager
;
if
(
pager
.
hasNext
())
{
elements
=
this
.
pager
.
next
().
iterator
();
}
}
@Override
public
boolean
tryAdvance
(
Consumer
<?
super
T
>
action
)
{
if
(
elements
.
hasNext
())
{
action
.
accept
(
elements
.
next
());
return
true
;
}
else
if
(
pager
.
hasNext
())
{
elements
=
pager
.
next
().
iterator
();
action
.
accept
(
elements
.
next
());
return
true
;
}
return
false
;
}
@Override
public
Spliterator
<
T
>
trySplit
()
{
return
null
;
}
@Override
public
long
estimateSize
()
{
return
pager
.
getTotalItems
();
}
@Override
public
int
characteristics
()
{
return
0
;
}
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment