groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Juan Vazquez <juanvazq...@gmail.com>
Subject Re: Iterate over 2 lists in a closure?
Date Fri, 02 Oct 2015 15:40:22 GMT
Would this work? Tried with simple classes and ints. Not sure if it fits
your scenario

//equal would is an empty list... using groovy truth
if(list1 - list2){
   println "not equal"
}else{
  println "equal"
}

Thanks,
Juan

On Fri, Oct 2, 2015 at 8:08 AM, Winnebeck, Jason <
Jason.Winnebeck@windstream.com> wrote:

> As for Dinko's note that transpose is on List -- I don't know how I've
> missed it -- I had been looking for this feature in Groovy a long time
> (under the name of "zip" like it's found in Python). Maybe it's because I
> normally check Iterable and Collection added methods more often than list.
> I would second Schalk's comment about adding a zip function that works with
> Iterable/Iterator. Whether or not it should match with "null" when one
> iterator is longer than the other is up for debate, but both transpose in
> Groovy and zip in Python both ignore any "extra" elements, although there
> is a zip_longest() in Python that takes a "fill value" to use. I'd propose
> the method is defined so any of the following work:
>
> zip(a, b)
> a.zip(b)
> zip(a, b,c,d)
> a.zip(b,c,d)
>
> I think that would be compatible with Groovy extension methods if it's
> defined as:
>
> static <T> Iterable<T> zip(Iterable<? extends T> self, Iterable<?
extends
> T>... others)
>
> Jason
>
> -----Original Message-----
> From: Schalk Cronjé [mailto:ysb33r@gmail.com]
> Sent: Friday, October 02, 2015 5:22 AM
> To: users@groovy.incubator.apache.org
> Subject: Re: Iterate over 2 lists in a closure?
>
> This thread made me think a zip iterator could be a useful addition to the
> language.
>
>    def myList = [1,2,3]
>    def myMap = [ a:'b', c:'d', e:'f' ]
>    zip(myList,myMap).each { l,m -> println "$l $m" }
>
> Prints out
>    1 a=b
>    2 c=d
>    3 e=f
>
> If one collection is exhausted, whilst the other is not, then just return
> 'null' for the additional items.
>
>
> On 02/10/2015 09:44, Dinko Srkoč wrote:
> > On 1 October 2015 at 19:47, Winnebeck, Jason
> > <Jason.Winnebeck@windstream.com> wrote:
> >> [...]
> >> This also sounds like a zip operation, which took me a really long time
> to
> >> find in Groovy but I recently found it:
> >>
> >>
> >>
> >> def letters = ['a', 'b']
> >> def numbers = [1, 2]
> >>
> >> assert ['a1', 'b2'] ==
> >>         GroovyCollections.transpose(letters, numbers).collect { it[0] +
> it[1]
> >> }
> >>
> > There's an easier way to use `transpose`:
> >
> >    assert ['a1', 'b2'] == [letters, numbers].transpose()*.join('')
> >
> > Cheers,
> > Dinko
> >
> >>
> >> In your case of testing a condition (equality) you can use any method
> >> instead of collect.
> >>
> >>
> >>
> >> Jason
> >>
> >>
> >>
> >> From: Owen Rubel [mailto:orubel@gmail.com]
> >> Sent: Thursday, October 01, 2015 1:28 PM
> >> To: users@groovy.incubator.apache.org
> >> Subject: Re: Iterate over 2 lists in a closure?
> >>
> >>
> >>
> >> if(list1.contains(list2) && list2.contains(list1)){ true }
> >>
> >>
> >> Owen Rubel
> >> 415-971-0976
> >> orubel@gmail.com
> >>
> >>
> >>
> >> On Thu, Oct 1, 2015 at 10:22 AM, Les Hartzman <lhartzman@gmail.com>
> wrote:
> >>
> >> Hi,
> >>
> >>
> >>
> >> I want to know if it's possible to have a closure that can iterate over
> 2
> >> equal length lists? The equivalent of doing list1.each, list2.each {
> ... },
> >> where each list is a list of an user-defined type.
> >>
> >>
> >>
> >> Basically I want to compare elements in the lists to see if they are
> equal.
> >>
> >>
> >>
> >> Thanks.
> >>
> >>
> >>
> >> Les
> >>
> >>
> >>
> >>
> >>
> >> ________________________________
> >> This email message and any attachments are for the sole use of the
> intended
> >> recipient(s). Any unauthorized review, use, disclosure or distribution
> is
> >> prohibited. If you are not the intended recipient, please contact the
> sender
> >> by reply email and destroy all copies of the original message and any
> >> attachments.
>
>
> --
> Schalk W. Cronjé
> Twitter / Ello / Toeter : @ysb33r
>
>
> ----------------------------------------------------------------------
> This email message and any attachments are for the sole use of the
> intended recipient(s). Any unauthorized review, use, disclosure or
> distribution is prohibited. If you are not the intended recipient, please
> contact the sender by reply email and destroy all copies of the original
> message and any attachments.
>



-- 
-Juan

Mime
View raw message