Как преобразовать List <String> в строку, разделенную запятой, без итерации Список явно

List<String> ids = new ArrayList<String>();
ids.add("1");
ids.add("2");
ids.add("3");
ids.add("4");

Теперь я хочу, чтобы результат из этого списка был 1,2,3,4 без явно, итерации по нему.

Ответ 1

В Android используется:

android.text.TextUtils.join(",", ids);

Ответ 2

С Java 8:

String csv = String.join(",", ids);

С Java 7- существует грязный способ (note: он работает, только если вы не вставляете строки, содержащие ", " в свой список) - очевидно, List#toString будет выполнять цикл для создания idList, но он не отображается в вашем коде:

List<String> ids = new ArrayList<String>();
ids.add("1");
ids.add("2");
ids.add("3");
ids.add("4");
String idList = ids.toString();
String csv = idList.substring(1, idList.length() - 1).replace(", ", ",");

Ответ 3

import com.google.common.base.Joiner;

Joiner.on(",").join(ids);

или вы можете использовать StringUtils:

   public static String join(Object[] array,
                              char separator)

   public static String join(Iterable<?> iterator,
                              char separator)

Объединяет элементы предоставленного массива /iterable в одну строку, содержащую предоставленный список элементов.

http://commons.apache.org/proper/commons-lang/javadocs/api-3.3.2/org/apache/commons/lang3/StringUtils.html

Ответ 4

Если вы хотите преобразовать список в формат CSV.........

List<String> ids = new ArrayList<String>();
ids.add("1");
ids.add("2");
ids.add("3");
ids.add("4");

// CSV format
String csv = ids.toString().replace("[", "").replace("]", "")
            .replace(", ", ",");

// CSV format surrounded by single quote 
// Useful for SQL IN QUERY

String csvWithQuote = ids.toString().replace("[", "'").replace("]", "'")
            .replace(", ", "','");

Ответ 5

Самый быстрый способ -

StringUtils.join(ids, ",");

Ответ 6

Следующее:

String joinedString = ids.toString()

предоставит вам список с разделителями-запятыми. Подробнее см. в документах.

Вам нужно будет выполнить некоторую пост-обработку, чтобы удалить квадратные скобки, но ничего слишком сложного.

Ответ 7

Объединение /concat и Разделить на ArrayList:

В Join/concat все элементы arraylist с запятой ( "," ) в String.

List<String> ids = new ArrayList<String>();
ids.add("1");
ids.add("2");
ids.add("3");
ids.add("4");
String allIds = TextUtils.join(",", ids);
Log.i("Result", allIds);

В разделить все элементы String на arraylist с запятой ( "," ).

String allIds = "1,2,3,4";
String[] allIdsArray = TextUtils.split(allIds, ",");
ArrayList<String> idsList = new ArrayList<String>(Arrays.asList(allIdsArray));
for(String element : idsList){
    Log.i("Result", element);
}

Готово

Ответ 8

Один лайнер (чистый Java)

System.out.println(joinList(ids));

public static String joinList(List list){
   return list.toString().replaceAll("[\\[.\\].\\s+]", "");
}

Ответ 9

У меня есть ArrayList из String, который мне нужно преобразовать в список, разделенный запятыми, без пробела. Метод ArrayList toString() добавляет квадратные скобки, запятую и пробел. Я попробовал метод регулярного выражения, как описано ниже.

List<String> myProductList = new ArrayList<String>();
myProductList.add("sanjay");
myProductList.add("sameer");
myProductList.add("anand");
Log.d("TEST1", myProductList.toString());     // "[sanjay, sameer, anand]"
String patternString = myProductList.toString().replaceAll("[\\s\\[\\]]", "");
Log.d("TEST", patternString);                 // "sanjay,sameer,anand"

Прокомментируйте более эффективную логику. (Код для Android/Java)

Thankx.

Ответ 10

Решение Java 8, если это не набор строк:

{Any collection}.stream()
    .collect(StringBuilder::new, StringBuilder::append, StringBuilder::append)
    .toString()

Ответ 11

Если вы используете Eclipse Collections (ранее GS Collections), вы можете использовать метод makeString().

List<String> ids = new ArrayList<String>();
ids.add("1");
ids.add("2");
ids.add("3");
ids.add("4");

Assert.assertEquals("1,2,3,4", ListAdapter.adapt(ids).makeString(","));

Если вы можете преобразовать ArrayList в FastList, вы можете избавиться от адаптера.

Assert.assertEquals("1,2,3,4", FastList.newListWith(1, 2, 3, 4).makeString(","));

Примечание. Я являюсь коммиттером для коллекций Eclipse.

Ответ 12

Вы можете использовать нижеприведенный код, если объект находится под ним.

String getCommonSeperatedString(List<ActionObject> actionObjects) {
    StringBuffer sb = new StringBuffer();
    for (ActionObject actionObject : actionObjects){
        sb.append(actionObject.Id).append(",");
    }
    sb.deleteCharAt(sb.lastIndexOf(","));
    return sb.toString();
}

Ответ 13

Вот приведенный ниже код, чтобы преобразовать List в строку, разделенную запятой, без итерации списка явно для этого, вам нужно сделать список и добавить в него элемент, чем преобразовать его в строку с разделителями-запятыми

Выход этого кода будет: Veeru, Nikhil, Ashish, Paritosh

вместо вывода списка [Veeru, Nikhil, Ashish, Paritosh]

String List_name;
List<String> myNameList = new ArrayList<String>();
myNameList.add("Veeru");
myNameList.add("Nikhil");
myNameList.add("Ashish");
myNameList.add("Paritosh");

List_name = myNameList.toString().replace("[", "")
                    .replace("]", "").replace(", ", ",");