[
https://issues.apache.org/jira/browse/GROOVY-9710?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17188543#comment-17188543
]
Sam Gleske commented on GROOVY-9710:
------------------------------------
{quote}Actually, the order in 2.4 is determined by whichever of the first or
second collections in first.intersect(second) is bigger. It was a marginal
efficiency gain in early JDKs.{quote}
This does not seem to be the case according to my unit tests and the example
code I gave above. In {{first.intersect(second)}} note the assertion shows
that {{first}} order is preserved even though the {{second}} collection is
bigger.
Feel free to reduce the priority to minor or close the issue as won't fix if
it's not a concern.
h2. Workaround
A workaround is easy using Groovy collections. Instead of the following.
{code}
first.intersect(second)
{code}
I migrated the code to the following.
{code}
first.findAll { it in second }
{code}
> List.intersect changes behavior from Groovy 2.4 and Groovy 2.5+
> ---------------------------------------------------------------
>
> Key: GROOVY-9710
> URL: https://issues.apache.org/jira/browse/GROOVY-9710
> Project: Groovy
> Issue Type: Bug
> Components: groovy-runtime
> Affects Versions: 3.0.5, 2.5.13
> Environment: Ubuntu 18.04.5 LTS
> OpenJDK Java 1.8.0_265 (Private Build 25.265-b01)
> Gradle 5.6.3
> Reporter: Sam Gleske
> Priority: Major
>
> h2. Description
> [List.intersect|http://docs.groovy-lang.org/latest/html/groovy-jdk/java/util/List.html#intersect(java.lang.Iterable)]
> preserves the ordering of the source list in Groovy 2.4 but instead takes
> the ordering of the intersecting list. This can lead to unexpected behavior
> in Groovy applications as code migrates to newer versions of Groovy.
> h2. Example code
> {code:java}
> // Passes assertion in Groovy 2.4.20 but fails in Groovy 2.5.13 and 3.0.5
> assert ['a', 'b'].intersect(['c', 'b', 'a']) == ['a', 'b']{code}
> h2. Expected behavior
> The order of the first list is preserved.
> h2. Actual behavior
> The order of the second list takes precedence.
> h2. Groovy version matrix
> ||Groovy version||Behavior||
> |2.4.20|Assertion passes|
> |2.5.13|Assertion fails (order reversed) |
> |3.0.5|Assertion fails (order reversed) |
--
This message was sent by Atlassian Jira
(v8.3.4#803005)