[jira] [Resolved] (GROOVY-7464) Iterable.intersect() is not commutative (and allows duplicates)

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

[jira] [Resolved] (GROOVY-7464) Iterable.intersect() is not commutative (and allows duplicates)

JIRA jira@apache.org

     [ https://issues.apache.org/jira/browse/GROOVY-7464?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Paul King resolved GROOVY-7464.
    Resolution: Won't Fix
      Assignee: Paul King

I am going to close this. There is now a Set-based version of intersect and the argument-flipping "optimisation" has been removed which makes the operation much more understandable.

> Iterable.intersect() is not commutative (and allows duplicates)
> ---------------------------------------------------------------
>                 Key: GROOVY-7464
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7464
>             Project: Groovy
>          Issue Type: Bug
>          Components: groovy-jdk
>    Affects Versions: 2.4.3
>            Reporter: Peter Ledbrook
>            Assignee: Paul King
>            Priority: Major
> The {{intersect()}} method on {{Iterable}} has different results depending on the order of the receiver object and the argument. For example,
> {code}
> def a = [1, 1, 2, 4]
> def b = [1, 2, 2, 3]
> println a.intersect(b)
> println b.intersect(a)
> {code}
> prints out two different results ({{[1, 1, 2]}} and {{[1, 2, 2]}}).
> Assuming that the operation should be commutative, i.e. the results should be the same for both, the question then becomes whether duplicates should even be returned at all.
> I think the method should always return a set as intersection is a set operation. In other words, {{Iterable.intersect()}} becomes a convenience wrapper that converts the receiver object and the argument to sets.
> This issue started as a discussion on the [dev mailing list|http://mail-archives.apache.org/mod_mbox/incubator-groovy-dev/201506.mbox/browser].

This message was sent by Atlassian JIRA