web-dev-qa-db-fra.com

Convertir Iterable en tableau

J'ai besoin de renvoyer un tableau String. J'utilise Guava pour diviser la String. Veuillez consulter le code ci-dessous

Iterable<String> arrayOfValues =  Splitter.on(";").split(myString);

il retourne une Iterable. mais j'ai besoin d'un String[]. Est-il possible de donner Iterator< Element > et de le convertir en Array[]. Merci beaucoup

18
stacktome
32
Narendra Pathai

Si vous utilisez la méthode plain Java String.split (regex), tout va bien. Il retourne une chaîne [].

"my;string".split(";")

String[] splits = mystring.split(";");

N'utilisez pas de bibliothèques sophistiquées si vous n'en avez pas besoin.

20
rec

Vous pouvez également utiliser FluentIterable :

FluentIterable.from(Splitter.on(":").split(mystring)).toArray(String.class)
3
Oussama Zoghlami

En Java 8, je préfère utiliser un flux pour convertir un itératif en tableau:

StreamSupport.stream(yourIterable.spliterator(), false).toArray(String[]::new)
3
Andy Brown

Je suis vraiment d'accord avec la réponse de @rec: N'utilisez pas de bibliothèques sophistiquées si vous n'en avez pas besoin.

Mais, je vous recommande fortement de lire le séparateur de Guava documentation } _:

Parce que le séparateur intégré à Java peut avoir des comportements délicats.

Par exemple, supposons que vous ayez des virgules de fin ou des virgules successives dans votre entrée . Que sera renvoyé après la scission?

  • null
  • ""
  • (mis au rebut) 

;)

1

Sans Guava, vous pourriez convertir un Iterable<String> en un tableau avec quelque chose comme ceci

public static <String> String[] toArray(Iterable<String> itr) {
    ArrayList<String> ret = new ArrayList<>();
    for(String t : itr) {
        ret.add(t);
    }
    return ret.toArray(new String[]);
}

Il est un peu difficile d’écrire une version générique de cette fonction en raison de la myriade de problèmes avec les tableaux génériques en Java, }, donc avancez légèrement.

1
9999years

En goyave, vous pouvez le convertir comme suit

 String test= "Welcome to Java world";
 Iterable<String> tokens=Splitter.on(" ").split(test);
 String array[]=Iterables.toArray(tokens,String.class);

Si vous souhaitez simplement accéder aux éléments Iterator comme un tableau, inutile de convertir. Vous pouvez accéder directement à ces éléments par index

par exemple

 System.out.println(Iterables.get(tokens,2));
0
Sam

Même si la question dit "Convertir Iterator en tableau", les réponses expliquent uniquement comment convertir Iterable en tableau.

Donc, pour convertir Iterator en Array with Guava, vous pouvez utiliser Iterators.toArray(Iterator<? extends T> iterator, Class<T> type).

0
Taylan