Java: печать LinkedList без квадратных скобок? - PullRequest
7 голосов
/ 21 октября 2011

Это довольно простой вопрос.Когда вы распечатываете LinkedList, например, так:

System.out.println(list);

Он печатает его, заключая в квадратные скобки список следующим образом:

[thing 1, thing 2, thing 3]

Есть ли способ, которым я могу напечататьбез квадратных скобок?

Ответы [ 8 ]

21 голосов
/ 21 октября 2011

Да - выполнить итерацию списка и распечатать его (с запятой после каждого, но последний элемент).Однако есть полезные утилиты:

Гуава :

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

commons-lang :

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

И еще одно замечание: не полагайтесь на метод .toString() любого объекта.Он не предназначен для отображения объекта пользователям или для использования в качестве предопределенного формата - он предназначен главным образом для целей отладки.

5 голосов
/ 21 октября 2011

Быстрый и грязный ответ:

String s = list.toString();
System.out.println(s.substring(1, s.length()-1));
2 голосов
/ 21 октября 2011

Вы можете создать подкласс LinkedList и переопределить его toString() метод, но это кажется немного чрезмерным. Вместо этого итерируйте его элементы и создайте String с StringBuilder или StringBuffer (если проблема параллелизма).

Примечание:
Я предлагаю вам не следовать ответу, предоставленному @ Sean Owen , поскольку это зависит от реализации и, следовательно, хрупко.

0 голосов
/ 21 октября 2013

Если вы в groovy , вам не нужно ничего импортировать, просто сделайте:

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

вещь 1, вещь 2, вещь 3


То же самое с коллекцией карт:

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

I = Джеймс Бонд

любовь = рок-н-ролл

id = 007

0 голосов
/ 21 октября 2011

Вы можете получить строку, возвращаемую методом .toString(), и удалить первый и последний символ или создать свой собственный класс списка и переопределить метод .toString(), чтобы выполнить итерацию по списку и напечатать элементы без скобок.Или вы можете сделать это как анонимный класс, например:

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

И, конечно, я слишком медленный.

0 голосов
/ 21 октября 2011
StrBuilder builder = new StrBuilder(); // apache commons lang.
for (Object object : yourList)
{
  builder.appendSeperator(", ");
  builder.append(object.toString());
}

System.out.println(builder.toString());
0 голосов
/ 21 октября 2011

Изменено с 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 голосов
/ 21 октября 2011

Это реализация по умолчанию toString () в LinkedList. Вы можете расширить LinkedList, чтобы предоставить собственную реализацию или использовать композицию и просто реализовать интерфейс 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...