2014-03-25 10 views
9

Ich habe eine groovy Liste von CurrencyTypes BeispielGroovy Konvertieren Liste der Objekte zu Comma Separated Strings

class CurrencyType 
{ 
    int id; 
    def code; 
    def currency; 
    CurrencyType(int _id, String _code, String _currency) 
    { 
     id = _id 
     code = _code 
     currency = _currency 
    } 
} 

def currenciesList = new ArrayList<CurrencyType>() 
currenciesList.add(new CurrencyType(1,"INR", "Indian Rupee")) 
currenciesList.add(new CurrencyType(1,"USD", "US Dollar")) 
currenciesList.add(new CurrencyType(1,"CAD", "Canadian Dollar")) 

Ich will die Liste der Codes als kommagetrennte Werte wie INR, USD, CAD mit minimalem Code und mit aus Erstellen einer neuen Liste

+0

@dmahapatro es war die erste Antwort, die ich bekam, ich versuchte es und es funktionierte – RanPaul

Antwort

20

Versuchen Sie currenciesList.code.join(", "). Es wird Liste im Hintergrund erstellen, aber es ist minimale Codelösung.

Wissen Sie auch, dass Ihr Code vielleicht sogar Groovier ist? Betrachten Sie Canonical oder TupleConstructor Transformationen.

//This transform adds you positional constructor. 
@groovy.transform.Canonical 
class CurrencyType { 
    int id 
    String code 
    String currency 
} 

def currenciesList = [ 
    new CurrencyType(1,"INR", "Indian Rupee"), 
    new CurrencyType(1,"USD", "US Dollar"), 
    new CurrencyType(1,"CAD", "Canadian Dollar") 
] 

//Spread operation is implicit, below statement is same as 
//currenciesList*.code.join(/, /) 
currenciesList.code.join(", ") 
+0

Versucht, es groovier zu machen. Ich verstehe nicht, warum diese Antwort nicht akzeptiert wurde. – dmahapatro

+1

Sie gewinnen einige, Sie verlieren einige. – grantmcconnaughey

+3

Es wäre interessant sich an 'currencyList * .code' zu ​​gewöhnen, da die automatische Listenerweiterung [wahrscheinlich entfernt wird] (http://docs.codehaus.org/display/GroovyJSR/GEP+11+-+Groovy+3 + Semantik + und + neu + MOP # GEP11-Groovy3semanticsundneuMOP-EntfernenautomatischeListexpansion) – Will

-1

arbeitet Dieses auch:

String s = "" 
    currenciesList.collect { s += "$it.code," } 

    assert s == "INR,USD,CAD," 
+5

Hier ist die Verwendung von 'join' die schlaue Art zu gehen, um das nachstehende', 'zu vermeiden. ;) – dmahapatro

5

Wenn Sie eine neue Liste zu erstellen, nicht wollen (was Sie sagen, dass Sie nicht tun wollen), können Sie inject verwenden

currenciesList.inject('') { s, v -> 
    s + (s ? ', ' : '') + v 
} 
Verwandte Themen