2012-01-10 13 views
16

Mam listę tak:Convert Array ciąg w Java/Groovy

List tripIds = new ArrayList() 
def sql = Sql.newInstance("jdbc:mysql://localhost:3306/steer", "root", 
      "", "com.mysql.jdbc.Driver") 
     sql.eachRow("SELECT trip.id from trip JOIN department WHERE organization_id = trip.client_id AND department.id =1") { 
      println "Gromit likes ${it.id}" 
      tripIds << it.id 
     } 

teraz na tripids drukowania daje mi cenią

[1,2,3,4,5,6,] 

teraz chcę przekonwertować ten wykaz do prostego łańcucha jak

1,2,3,4,5,6 

Jak mogę to zrobić

Odpowiedz

30

Zastosowanie join np

tripIds.join(", ") 

niezwiązane, ale jeśli chcesz po prostu utworzyć listę coś z innej listy, byłbyś lepiej robić coś zamiast tego map lub collect ręcznego tworzenia listy i dołączania do niej, co jest mniej idiomatyczne, np (Niesprawdzone)

def sql = Sql.newInstance("jdbc:mysql://localhost:3306/steer", "root", "", "com.mysql.jdbc.Driver") 
def tripIds = sql.map { it.id } 

lub jeśli tylko troska o powstałego łańcucha,

def tripIds = sql.map { it.id }.join(", ") 
-1
String str = tripIds.toString(); 
str = str.substring(1, str.length() - 1); 
6

w Groovy:

def myList = [1,2,3,4,5] 
def asString = myList.join(", ") 
5

Użyj join method że Groovy dodaje, do kolekcji

List l = [1,2,3,4,5,6] 
assert l.join(',') == "1,2,3,4,5,6" 
-2

można wypróbować następujące podejście do listy przekształcić w ciąg

StringBuffer sb = new StringBuffer(); 
    for (int i=0; i<tripIds.size(); i++) 
    { 
     if(i!=0){ 
     sb.append(",").append(tripIds.get(i)); 
     }else{ 
      sb.append(tripIds.get(i)); 
     } 
    } 
    String listInString = sb.toString(); 
    System.out.println(listInString); 

przykładu

ArrayList<String> tripIds = new ArrayList<String>(); 
     tripIds.add("a"); 
     tripIds.add("b"); 
     tripIds.add("c"); 
     StringBuffer sb = new StringBuffer(); 
     for (int i=0; i<tripIds.size(); i++) 
     { 
      if(i!=0){ 
      sb.append(",").append(tripIds.get(i)); 
      }else{ 
       sb.append(tripIds.get(i)); 
      } 
     } 
     String listInString = sb.toString(); 
     System.out.println(listInString); 
+0

Wydaje się to dużo pracy. Po co powtarzać kod dołączania 'tripIds.get (i)' w obu warunkach? Jeśli o to chodzi, dlaczego dwa razy pokaż kod do stworzenia kreacji; czy nie byłoby bardziej przyjazne dla przestrzeni pionowej, aby umieścić ją w metodzie i po prostu nazwać ją z przykładu? –

+3

Zakładam, że otrzymujesz zapłatę za linię? –