Best Loop Idiom для специального корпуса последнего элемента

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

Есть ли лучшая практика или элегантная форма, которая не требует дублирования кода или добавления в if, иначе в цикле.

Например, у меня есть список строк, которые я хочу напечатать в списке через запятую. (решение do while уже предполагает, что список содержит 2 или более элементов, в противном случае это будет так же плохо, как и более правильный цикл for с условным выражением).

например List = ("собака", "кошка", "летучая мышь")

Я хочу напечатать "[собака, кошка, летучая мышь]"

Я представляю 2 метода

Для цикла с условным

public static String forLoopConditional(String[] items) {

String itemOutput = "[";

for (int i = 0; i < items.length; i++) {
    // Check if we're not at the last element
    if (i < (items.length - 1)) {
        itemOutput += items[i] + ", ";
    } else {
        // last element
        itemOutput += items[i];
    }
}
itemOutput += "]";

return itemOutput;
 }

делать, пока цикл заполняет цикл

public static String doWhileLoopPrime(String[] items) {
String itemOutput = "[";
int i = 0;

itemOutput += items[i++];
if (i < (items.length)) {
    do {
        itemOutput += ", " + items[i++];
    } while (i < items.length);
}
itemOutput += "]";

return itemOutput;
}

Класс тестера:

public static void main(String[] args) {
    String[] items = { "dog", "cat", "bat" };

    System.out.println(forLoopConditional(items));
    System.out.println(doWhileLoopPrime(items));

}

В классе Java AbstractCollection он имеет следующую реализацию (немного многословно, потому что он содержит все проверки ошибок в крайнем случае, но неплохо).

public String toString() {
    Iterator<E> i = iterator();
if (! i.hasNext())
    return "[]";

StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
    E e = i.next();
    sb.append(e == this ? "(this Collection)" : e);
    if (! i.hasNext())
    return sb.append(']').toString();
    sb.append(", ");
}
}

Ответы на вопрос(18)

Ваш ответ на вопрос