Есть ли служебный метод для разделения списка по заданной строке? - PullRequest
3 голосов
/ 10 марта 2010

Есть ли что-то вроде следующего в Apache Common Lang или Spring Utils или вы пишете свой собственный метод Util для этого?

List<String> list = new ArrayList<String>();
list.add("moo");
list.add("foo");
list.add("bar");

String enumeratedList = Util.enumerate(list, ", ");

assert enumeratedList == "moo, foo, bar";

Я помню использование implode в php, это то, что я ищу в java.

$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);

Ответы [ 3 ]

11 голосов
/ 10 марта 2010

Вы можете использовать StringUtils.join(Object[] array, String delimiter) (от commons-lang) следующим образом:

String enumeratedList = StringUtils.join(list.toArray(), ", ");
4 голосов
/ 10 марта 2010

Google Collections предоставляет класс Joiner , который можно использовать следующим образом:

public class Main {

    public static void main(String[] args) {
        List<String> list = Lists.newLinkedList();
        list.add("1");
        list.add("2");
        list.add("3");
        System.out.println(Joiner.on(", ").join(list));
    }

}
3 голосов
/ 10 марта 2010

Это довольно тривиально, если вы не хотите зависеть от commons-lang. Также не здорово конвертировать List в Array, просто чтобы снова присоединить его к String. Вместо этого просто переберите свою коллекцию. Даже лучше, чем использование Collection, используется Iterable, который обрабатывает все, что может быть итератором (даже некоторый поток или Коллекция неизвестной длины).

import java.util.Arrays;
import java.util.Iterator;

public class JoinDemo {
  public static String join(String sep, Iterable<String> i) {
    StringBuilder sb = new StringBuilder();
    for (Iterator<String> it = i.iterator(); it.hasNext();) {
      sb.append(it.next());
      if (it.hasNext())
        sb.append(sep);
    }
    return sb.toString();
  }

  public static void main(String[] args) {
    System.out.println(join(",", Arrays.asList(args)));
  }
}

Пример:

# javac JoinDemo.java
# java JoinDemo a b c
a,b,c
...