@@ -51,6 +51,7 @@ private static <T> LmdbSpliterator<T> createSpliterator(
5151 new LmdbRangeSpliterator <>(
5252 cursor ,
5353 comparator ,
54+ createEntryComparator (comparator ),
5455 keyRange .getStart (),
5556 keyRange .getStop (),
5657 keyRange .isStartKeyInclusive (),
@@ -60,16 +61,19 @@ private static <T> LmdbSpliterator<T> createSpliterator(
6061 new LmdbRangeReversedSpliterator <>(
6162 cursor ,
6263 comparator ,
64+ createReversedEntryComparator (comparator ),
6365 keyRange .getStart (),
6466 keyRange .getStop (),
6567 keyRange .isStartKeyInclusive (),
6668 keyRange .isStopKeyInclusive ());
6769 }
6870 } else {
6971 if (keyRange .directionForward ) {
70- spliterator = new LmdbSpliterator <>(cursor , comparator );
72+ spliterator = new LmdbSpliterator <>(cursor , comparator , createEntryComparator ( comparator ) );
7173 } else {
72- spliterator = new LmdbReversedSpliterator <>(cursor , comparator );
74+ spliterator =
75+ new LmdbReversedSpliterator <>(
76+ cursor , comparator , createReversedEntryComparator (comparator ));
7377 }
7478 }
7579 return spliterator ;
@@ -80,13 +84,19 @@ private static class LmdbSpliterator<T> implements Spliterator<KeyVal<T>> {
8084 final Cursor <T > cursor ;
8185 Boolean isFound ;
8286 final KeyVal <T > entry = new KeyVal <>();
87+ final Comparator <T > comparator ;
8388 final Comparator <KeyVal <T >> entryComparator ;
8489
85- private LmdbSpliterator (final Cursor <T > cursor , final Comparator <T > comparator ) {
90+ private LmdbSpliterator (
91+ final Cursor <T > cursor ,
92+ final Comparator <T > comparator ,
93+ final Comparator <KeyVal <T >> entryComparator ) {
8694 this .cursor = cursor ;
87- entryComparator = (o1 , o2 ) -> comparator .compare (o1 .key (), o2 .key ());
95+ this .comparator = comparator ;
96+ this .entryComparator = entryComparator ;
8897 }
8998
99+ @ Override
90100 public final boolean tryAdvance (final Consumer <? super KeyVal <T >> action ) {
91101 if (hasNext ()) {
92102 action .accept (createEntry ());
@@ -95,6 +105,7 @@ public final boolean tryAdvance(final Consumer<? super KeyVal<T>> action) {
95105 return false ;
96106 }
97107
108+ @ Override
98109 public final void forEachRemaining (final Consumer <? super KeyVal <T >> action ) {
99110 while (hasNext ()) {
100111 action .accept (createEntry ());
@@ -138,14 +149,22 @@ public Comparator<? super KeyVal<T>> getComparator() {
138149 }
139150 }
140151
141- private static class LmdbReversedSpliterator <T > extends LmdbSpliterator <T > {
152+ private static <T > Comparator <KeyVal <T >> createEntryComparator (final Comparator <T > comparator ) {
153+ return (o1 , o2 ) -> comparator .compare (o1 .key (), o2 .key ());
154+ }
142155
143- final Comparator <KeyVal <T >> entryComparator ;
156+ private static <T > Comparator <KeyVal <T >> createReversedEntryComparator (
157+ final Comparator <T > comparator ) {
158+ return (o1 , o2 ) -> comparator .compare (o1 .key (), o2 .key ());
159+ }
144160
145- private LmdbReversedSpliterator (final Cursor <T > cursor , final Comparator <T > comparator ) {
146- super (cursor , comparator );
147- // Create a reversed comparator.
148- entryComparator = (o1 , o2 ) -> comparator .compare (o2 .key (), o1 .key ());
161+ private static class LmdbReversedSpliterator <T > extends LmdbSpliterator <T > {
162+
163+ private LmdbReversedSpliterator (
164+ final Cursor <T > cursor ,
165+ final Comparator <T > comparator ,
166+ final Comparator <KeyVal <T >> entryComparator ) {
167+ super (cursor , comparator , entryComparator );
149168 }
150169
151170 @ Override
@@ -175,11 +194,12 @@ private static class LmdbRangeSpliterator<T> extends LmdbSpliterator<T> {
175194 private LmdbRangeSpliterator (
176195 final Cursor <T > cursor ,
177196 final Comparator <T > comparator ,
197+ final Comparator <KeyVal <T >> entryComparator ,
178198 final T start ,
179199 final T stop ,
180200 final boolean startInclusive ,
181201 final boolean stopInclusive ) {
182- super (cursor , comparator );
202+ super (cursor , comparator , entryComparator );
183203 this .comparator = comparator ;
184204 this .start = start ;
185205 this .stop = stop ;
@@ -227,11 +247,12 @@ private static class LmdbRangeReversedSpliterator<T> extends LmdbReversedSpliter
227247 private LmdbRangeReversedSpliterator (
228248 final Cursor <T > cursor ,
229249 final Comparator <T > comparator ,
250+ final Comparator <KeyVal <T >> entryComparator ,
230251 final T start ,
231252 final T stop ,
232253 final boolean startInclusive ,
233254 final boolean stopInclusive ) {
234- super (cursor , comparator );
255+ super (cursor , comparator , entryComparator );
235256 this .comparator = comparator ;
236257 this .start = start ;
237258 this .stop = stop ;
@@ -298,7 +319,7 @@ private LmdbPrefixSpliterator(
298319 final Comparator <T > comparator ,
299320 final BufferProxy <T > proxy ,
300321 final T prefix ) {
301- super (cursor , comparator );
322+ super (cursor , comparator , createEntryComparator ( comparator ) );
302323 this .proxy = proxy ;
303324 this .prefix = prefix ;
304325 }
@@ -330,7 +351,7 @@ private LmdbPrefixReversedSpliterator(
330351 final Comparator <T > comparator ,
331352 final BufferProxy <T > proxy ,
332353 final T prefix ) {
333- super (cursor , comparator );
354+ super (cursor , comparator , createReversedEntryComparator ( comparator ) );
334355 this .proxy = proxy ;
335356 this .prefix = prefix ;
336357
0 commit comments