-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Keep object order in unmodifiable collection returned by MapObjectMan… #1008
Open
solcott
wants to merge
1
commit into
googlemaps:main
Choose a base branch
from
solcott:fix_mapobjectmanager_order
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@solcott Thanks for the PR!
Could you explain more why this is needed? Did you still encounter the same issue #772 even after PR #972 was merged?
If so it would be useful to see some code that's generating the error, ideally in the form of unit tests.
My understanding of
Collections.unmodifiableX()
is that it's just a wrapper around the underlying data structure so it should still respect the ordering enforced by the implementation, in our case theLinkedHashSet
.Collection.iterator
andSet.iterator
both have effectively the same language in the Javadocs:cc @jeffdgr8 as the contributor of PR #972
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking at the source for
UnmodifiableSet
, it subclassesUnmodifiableCollection
, additionally overridingequals()
andhashCode()
to delegate to the wrapped collection.I would not expect this change to affect the iteration order, which should have been resolved in my PR. But I would expect this change to allow for comparisons between multiple versions of the wrapped collection itself. For example:
@solcott do you have a similar usage that requires comparisons of these
MapObject.Collection
s for equality?I think this is a good change either way, as it would allow for these kinds of comparisons.
Collection
itself doesn't stipulate a contract forequals()
beyondObject.equals
, butSet
does, which is the underlying collection we're using here.If this is the contract we want to support and there are use cases for it, it may make sense to change the signature of
getObjects()
and related functions that call it to explicitly return aSet
rather than the more generalCollection
type. That way it would enforce this behavior expectation at the API level. This would be a non-breaking safe API change, sinceSet
is aCollection
.