2015-12-31 22 views
14

İki yöntemim var: one ve two. Yöntem one, person'un bir sınıf ve two sınıfının Person sınıfının tek tek nesnelerini aldığı bir List<Person> alır.Nesnelerin listesini tek tek parametreler olarak geçirin

List<Person> tek tek nesne parametreleri olarak two yöntemine nasıl geçebilirim? List, 0 veya 1 veya daha fazla öğe içerebilir ve listesini geçirmek için , yöntem two yöntemi tarafından gerekli tüm 3 param yoksa.

def one (List<Person> persons) { 

    // check the size of the list 
    // pass arguments to method two 

    // this works 
    two(persons[0], persons[1], persons[2]) 

    //what I want is 
    two(persons.each { it + ', '}) 
} 

def two (Person firstPerson, Person secondPerson, Person thirdPerson) { 

    // do something with the persons 
} 
+0

:

Şimdi
// Spread operator "*" def one(List<Person> persons) { two(*persons) } // Variadic function "..." def two(Person... values) { values.each { person -> println person } } 

iki yöntem geçen null adlı boş bir liste ya da bu olduğu Kişi örneklerinin her numarayı arayabilirsiniz '' Kişiler’in yerine. Başkentler bazen kedere yol açabilir, çünkü zaman zaman bir sınıfla ilgili olduğunu tahmin edersiniz –

+0

Doğru sınıf ismimi bir örnekle değiştirdiğimde hata düzeltiyordum. Bunu günlük programımda yapmıyorum. Soruyu düzenledim –

cevap

8

Kullanmak isteyeceksiniz "Liste 0 veya 1 veya daha fazla elemana sahip olabilir" sizin arama yöntemi için yayılma operatör * kullanmak, ancak yorum dayalı olabilir ikinci yönteminiz için variadic işlevi. Bu deneyin: Ben harfle parametre adları kullanmaktan kaçının `kişileri yani ediyorum

two(null) 
two([]) 
two(person1, person2, person3, person4, person5) 
11

Kullanım:

two(*persons) 

* listesini bölmek ve ayrı argümanlar olarak unsurlarını geçecek.

Olacak:

def one (List<String> strings) { 
    two(strings[0], strings[1], strings[2]) 
    two(*strings) 
} 

def two (String firstPerson = null, String secondPerson = null, String thirdPerson = null) { 
    println firstPerson 
    println secondPerson 
    println thirdPerson 
} 

one(['a','b','c']) 
+2

Güzel! Neredeyse haklı, ama ya sadece iki argüman varsa? bir (['a', 'b']). Biniam, eksik olanı boş bırakmak istiyor. Neyse ki, Groovy'de varsayılan argümanlar var, bu yüzden tam çözüm iki olurdu (String firstPerson = null, String secondPerson = null, String thirdPerson = null) –

+0

@JakubDyszkiewicz, cevabı düzenlemek için çekinmeyin. – Opal

İlgili konular