2011-10-21 17 views

Odpowiedz

21

Tak - powoduje iterację listy i jej wydrukowanie (przecinkiem po każdym, ale ostatnim elemencie). Jednakże, istnieje utils pomóc:

Guava:

String result = Joiner.on(", ").join(list); 

commons-lang:

String result = StringUtils.join(list, ", "); 

I jedna uwaga: nie należy polegać na metodzie dowolnego obiektu .toString(). Nie jest przeznaczony do wyświetlania obiektu użytkownikom ani do używania jako predefiniowany format - służy głównie do celów debugowania.

+1

Ten potrzebuje +2 dla narzędzi i 'toString()' bit. –

+0

Co to jest import dla StringUtils? – Blackvein

+0

Nieważne, znalazłem :) Dzięki chłopaki! – Blackvein

5

Szybkie i-brudny odpowiedź brzmi:

String s = list.toString(); 
System.out.println(s.substring(1, s.length()-1)); 
+2

Ponieważ zawarte w "szybkie i brudne" zastrzeżenie, że nie pochwali twojej odpowiedzi. Powiedział, że jest to dokładnie taki rodzaj rzeczy, które powinniśmy * zniechęcać * innych programistów. –

0

Jest to implementacja domyślna toString() na LinkedList. Można rozszerzyć listę LinkedList, aby zapewnić własną implementację lub użyć kompozycji i po prostu zaimplementować interfejs java.util.List.

public class MyLinkedList<E> implements List<E> 
{ 
    private final List<E> delegate; 

    public MyLinkedList(List<E> list) 
    { 
     delegate = list; 
    } 

    /** 
    * @return see overriden class or implemented interface 
    * @see java.lang.Object#toString() 
    */ 
    @Override 
    public String toString() 
    { 
     return "My special toString() method"; 
    } 

    // implement rest of the java.util.List interface 
2

Można podklasy LinkedList i zastąpić to toString() metoda, ale to wydaje się nieco wygórowana. Zamiast tego, iteruj po jego elementach i konstruuj String z StringBuilder lub StringBuffer (jeśli problemem jest współbieżność).

Uwaga:
Proponuję nie śledzić odpowiedzi dostarczonych przez @Sean Owen, ponieważ jest to zależne od implementacji, a zatem krucha.

0

Modified od AbstractCollection.java:

/* 
    * @return a string representation of a collection 
    */ 
    public static final String collectionToString(Collection c) { 
     Iterator<E> it = c.iterator(); 
     if (! it.hasNext()) 
      return ""; 

     StringBuilder sb = new StringBuilder(); 
     for (;;) { 
      E e = it.next(); 
      sb.append(e == c ? "(this Collection)" : e); 
      if (! it.hasNext()) 
       return sb.toString(); 
      sb.append(',').append(' '); 
     } 
    } 
0
StrBuilder builder = new StrBuilder(); // apache commons lang. 
for (Object object : yourList) 
{ 
    builder.appendSeperator(", "); 
    builder.append(object.toString()); 
} 

System.out.println(builder.toString()); 
0

Można chwycić ciąg zwracany przez metodę .toString() i usunąć pierwszy i ostatni znak, lub tworzyć własne listy klas i zastąpić metodę .toString() iterację listę i wydrukuj elementy bez nawiasów. Lub możesz to zrobić jako anonimową klasę, taką jak:

List<String> list = new List<String>() { 
    public String toString() { 
     // Custom To String Stuff Here 
    } 
}; 

I oczywiście jestem zbyt wolny.

0

Jeśli jesteś w porywające, nie trzeba importować niczego, po prostu zrobić:

list = ["thing 1", "thing 2", "thing 3"]  
println list.collect { i -> "$i" }.join(', ') 

rzeczą 1, co 2, co 3


To samo dotyczy kolekcji Map:

map = [I:"James Bond", love:"rock N roll", id:"007"] 
println map.collect { k,v -> "$k = $v" }.join('\n') 

I = James Bond

rolka miłość = rock n

id = 007

Powiązane problemy