Comments (6)
Yes this is an issue, thanks for reporting it.
hasNext() does advance the pointer. It does not affect typical usage of the
iterator, but it's wrong nonetheless.
But I have not been able to reproduce that particular issue with Guava. The
following copies from a FilteringIterator into a Guava ImmutableCollection and
the test passes:
@Test
public void testFilteringIterator() {
List<String> testList = Arrays.asList("abc", "bcd", "cde");
FilteringIterator<String> iterator = new FilteringIterator<String>(testList.iterator()) {
@Override
public boolean isValid(String object) {
return true;
}
};
ImmutableCollection<String> immutableCollection = ImmutableList.<String>builder().addAll(iterator).build();
assertThat(immutableCollection.size(), is(3));
assertThat(immutableCollection.toString(), is("[abc, bcd, cde]"));
}
It's possible there is some other way of copying into an ImmutableCollection
that I'm not aware of could hit this issue though. As a workaround in the
meantime the usage above seems to work for me.
Thanks for reporting this, it will be fixed!
Original comment by [email protected]
on 27 Sep 2013 at 2:16
- Changed state: Accepted
from cqengine.
[deleted comment]
from cqengine.
Sorry cut and past error.
It occurs when using ImmutableSet/List.copyOf(Iterator) as it uses the
hasNext() to optimize the returned List / Set. This reproduction case works
with Guava 13 and on. I had never attempted to use the builder in place of the
copyOf method and so hit this right away.
@Test
public void testFilteringIterator() {
List<String> testList = Arrays.asList("abc", "bcd", "cde");
FilteringIterator<String> iterator = new FilteringIterator<String>(testList.iterator()) {
@Override
public boolean isValid(String object) {
return true;
}
};
ImmutableCollection<String> immutableCollection = ImmutableList.copyOf(iterator);
assertThat(immutableCollection.size(), is(3));
assertThat(immutableCollection.toString(), is("[abc, bcd, cde]"));
}
Original comment by [email protected]
on 27 Sep 2013 at 5:20
from cqengine.
Original comment by [email protected]
on 2 Oct 2013 at 9:36
- Changed state: Started
from cqengine.
Fixed in trunk, by applying your patch. Many thanks Gabe!
I will leave this issue open until included in the next binary release,
hopefully next week or so.
Original comment by [email protected]
on 2 Oct 2013 at 10:45
from cqengine.
Fixed in release 1.2.4. Many thanks!
Original comment by [email protected]
on 22 Nov 2013 at 10:01
- Changed state: Fixed
from cqengine.
Related Issues (20)
- Auto-generate attributes HOT 2
- Recommendation on ID indexes HOT 1
- And.calcHashCode being performance Bottlneck HOT 11
- Set.add semantics is not perfect. HOT 4
- Set remove() and removeAll() doesn't follow substitutability principle. HOT 4
- Add listeners (observers) to IndexedCollection HOT 5
- Add support for query "dialects" like SQL HOT 2
- Documentation for selective READ_COMMITTED transaction isolation using RW lock HOT 2
- Support lock-free READ_COMMITTED transaction isolation via multiple buffering HOT 2
- DeduplicationStrategy.MATERIALIZE broken in 1.2.4 HOT 1
- Modify Or/And to allow only one child. HOT 2
- Comparing two objects? HOT 1
- ObjectLockingIndexedCollection's StripedLock does not handle negative hashcodes HOT 1
- Multiversion concurrency control(MVCC) should be implemented for transaction isolation HOT 2
- Query CONSISTENTLY slower with the addition of NavigableIndex HOT 1
- Provide the way to determine how much memory used by index HOT 2
- Attribute#getValues to return Iterable HOT 1
- deduplication not return duplicate objects from the collection HOT 3
- IllegalArgumentException when ResultSet.getMergeCost() changes during query HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cqengine.