114 votes

Java: Meilleur moyen de convertir une liste <Integer> lister <String>

J'ai une liste d'entiers, List<Integer> et j'aimerais convertir tous les objets entiers en chaînes, pour finir avec un nouveau List<String> .

Naturellement, je pouvais créer un nouveau List<String> et parcourir la liste en appelant String.valueOf() pour chaque entier, mais je me demandais s'il y avait une meilleure façon de le faire (lire: plus automatique ) ?

105voto

Ben Lings Points 11395

À l'aide de Google Collections, vous pouvez utiliser l' transform méthode dans les Listes de classe

import com.google.common.collect.Lists;
import com.google.common.base.Functions

List<Integer> integers = Arrays.asList(1, 2, 3, 4);

List<String> strings = Lists.transform(integers, Functions.toStringFunction());

L' List retournée par transform est une vue sur le soutien à la liste de la transformation sera appliquée sur chaque accès à la transformée de liste.

Sachez que Functions.toStringFunction() va jeter un NullPointerException lorsqu'il est appliqué à la valeur null, donc à n'utiliser que si vous êtes sûr que votre liste ne contiendra la valeur null.

93voto

Trejkaz Points 1928

Solution pour Java 8. Un peu plus long que celui de Guava, mais au moins vous n'avez pas à installer de bibliothèque.

 import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

//...

List<Integer> integers = Arrays.asList(1, 2, 3, 4);
List<String> strings = integers.stream().map(Object::toString)
                                        .collect(Collectors.toList());
 

84voto

jsight Points 16025

Autant que je sache, itérer et instancier est le seul moyen de le faire. Quelque chose comme (pour les autres une aide potentielle, puisque je suis sûr que vous savez comment faire cela):

 List<Integer> oldList = ...
/* Specify the size of the list up front to prevent resizing. */
List<String> newList = new ArrayList<String>(oldList.size()) 
for (Integer myInt : oldList) { 
  newList.add(String.valueOf(myInt)); 
}
 

41voto

SCdF Points 11397

Ce que vous faites est bien, mais si vous ressentez le besoin de "Java-it-up", vous pouvez utiliser un Transformer et la méthode de collecte d' Apache Commons , par exemple:

 public class IntegerToStringTransformer implements Transformer<Integer, String> {
   public String transform(final Integer i) {
      return (i == null ? null : i.toString);
   }
}
 

..et alors..

 CollectionUtils.collect(
   collectionOfIntegers, 
   new IntegerToStringTransformer(), 
   newCollectionOfStrings);
 

9voto

Mike Polen Points 3173

Le source de String.valueOf montre ceci:

 public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}
 

Non pas que cela compte beaucoup, mais j'utiliserais toString.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X