web-dev-qa-db-fra.com

Comment convertir une liste <String> en une chaîne séparée par des virgules sans itérer explicitement la liste

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

Maintenant, je veux une sortie de cette liste comme 1,2,3,4 sans explicitement itérant dessus.

157
Pramod Kumar

Sur Android, utilisez:

Android.text.TextUtils.join(",", ids);
419
JJD

Avec Java 8:

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

Avec Java 7-, il existe un moyen désordonné ( note: cela ne fonctionne que si vous n'insérez pas de chaînes contenant ", " dans votre liste ) - évidemment, List#toString effectuera une boucle pour créer idList mais il n'apparaît pas dans votre code:

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(", ", ",");
140
assylias
import com.google.common.base.Joiner;

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

ou vous pouvez utiliser StringUtils :

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

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

Joint les éléments du tableau fourni/iterable en une seule chaîne contenant la liste d'éléments fournie.

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

101

Si vous voulez convertir la liste au format 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(", ", "','");
60
milanpanchal

Le moyen le plus rapide est

StringUtils.join(ids, ",");
52
Nodoze

Le suivant:

String joinedString = ids.toString()

vous donnera une liste délimitée par des virgules. Voir docs pour plus de détails .

Vous devrez faire un peu de post-traitement pour supprimer les crochets, mais rien de trop délicat.

21
Dancrumb

Un liner (Java pur)

list.toString().replace(", ", ",").replaceAll("[\\[.\\]]", "");
14
Pujan Srivastava

Join/concat & Split fonctionne sur ArrayList:

Pour Join/concat tous les éléments de la liste avec virgule (",") en 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);

To split tous les éléments de String en liste avec virgule (",").

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);
}

Fait

12
Hiren Patel

J'ai ArrayList of String, que je dois convertir en liste séparée par des virgules, sans espace. La méthode ArrayList toString () ajoute des crochets, des virgules et des espaces. J'ai essayé la méthode d'expression régulière en tant que sous.

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"

Veuillez commenter pour une meilleure logique plus efficace. (Le code est pour Android/Java)

Merci.

6
SHS

Solution Java 8 si ce n'est pas une collection de chaînes:

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

Si vous utilisez Collections Eclipse (anciennement GS Collections), vous pouvez utiliser la méthode 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(","));

Si vous pouvez convertir votre ArrayList en FastList, vous pouvez vous débarrasser de l'adaptateur.

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

Remarque: Je suis un partisan des collections Eclipse.

3
Craig P. Motlin

Vous pouvez utiliser le code ci-dessous si l'objet comporte des attributs.

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();
}
3
Brijendra Verma

Voici le code donné ci-dessous pour convertir une liste en une chaîne séparée par des virgules sans itérer explicitement une liste, vous devez donc créer une liste et y ajouter un élément, puis la convertir en chaîne séparée par des virgules.

La sortie de ce code sera: Veeru, Nikhil, Ashish, Paritosh

au lieu de la sortie de la liste [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(", ", ",");
0
user3652986