458 votes

Moyen facile de transformer Iterable Collection

Dans mon application, j’ai utiliser 3e partie bibliothèque (données de printemps pour MongoDb être exact).

Les méthodes de cette bibliothèque retournent , tandis que le reste de mon code s’attend à ce .

Y a-t-il une méthode utilitaire quelque part qui me permettra de convertir rapidement un à l’autre. Je voudrais éviter de faire un banch de `` boucles dans mon code pour une telle chose simple.

397voto

ColinD Points 48573

Avec la Goyave , vous pouvez utiliser des Listes.newArrayList(Itératif) ou de Jeux.newHashSet(Itératif), parmi d'autres méthodes similaires. Bien sûr, ce copier tous les éléments de la mémoire. Si ce n'est pas acceptable, je pense que ton code qui fonctionne avec ces devrait prendre en Iterable plutôt que d' Collection. Goyave arrive aussi de fournir des méthodes pratiques pour faire des choses que vous pouvez faire sur un Collection à l'aide d'un Iterable (comme Iterables.isEmpty(Iterable) ou Iterables.contains(Iterable, Object)), mais les conséquences de performance sont de plus en plus évidents.

99voto

Atreys Points 2234

Vous pouvez écrire votre propre méthode utilitaire pour cela ainsi :

50voto

yegor256 Points 21737

``de `` peuvent aider (bien qu’ils ne supportent pas génériques dans la dernière version stable 3.2.1) :

Version 4.0 (qui est dans la capture instantanée en ce moment) prend en charge les génériques et vous pouvez vous débarrasser de la `` .

24voto

Tomasz Nurkiewicz Points 140462

De CollectionUtils:

Voici les sources complets de cette méthode utilitaire :

14voto

Alexander Shopov Points 101

Alors, n'oubliez pas que toutes les collections sont limitées, tandis que d'Itérable a pas de promesses que ce soit. Si quelque chose est Itératif, vous pouvez obtenir un Itérateur et c'est tout.

for (piece : sthIterable){
..........
}

sera élargie à:

Iterator it = sthIterable.iterator();
while (it.hasNext()){
    piece = it.next();
..........
}

c'.hasNext() n'est pas nécessaire de toujours retourner false. Ainsi, dans le cas général, vous ne pouvez pas vous attendre à être en mesure de convertir tous les Itérable à une Collection. Par exemple, vous pouvez effectuer une itération sur tous positifs nombres naturels, itérer sur quelque chose avec des cycles qui produit les mêmes résultats, encore et encore, etc.

Sinon: Atrey la réponse est assez fine.

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