web-dev-qa-db-fra.com

Matrices Java et génériques: Java équivalent à C # IEnumerable <T>

Donc, en C #, je peux traiter un string[] comme un IEnumerable<string>.

Existe-t-il un équivalent Java?

43
Winston Smith

Iterable<String> est l'équivalent de IEnumerable<string>.

Ce serait une oddité dans le système de types si les tableaux implémentaient Iterable. String[] est une instance de Object[], mais Iterable<String> n'est pas un Iterable<Object>. Les classes et les interfaces ne peuvent pas se multiplier pour implémenter la même interface générique avec des arguments génériques différents.

String[] fonctionnera comme un Iterable dans la boucle for améliorée.

String[] peut facilement être transformé en une Iterable:

Iterable<String> strs = Java.util.Arrays.asList(strArray);

Préférez les collections aux tableaux (pour les non-primitives en tout cas). Les tableaux de types de référence sont un peu bizarres et sont rarement nécessaires depuis Java 1.5.

47

Recherchez-vous Iterable<String>?

Iterable<T> <=> IEnumerable<T>
Iterator<T> <=> IEnumerator<T>
8
bruno conde

Iterable <T>

4
Learning

Je crois que l'équivalent Java est Iterable<String>. Bien que String[] ne l'implémente pas, vous pouvez quand même parcourir les éléments:

String[] strings = new String[]{"this", "that"};
for (String s : strings) {
    // do something
}

Si vous avez vraiment besoin de quelque chose qui implémente Iterable<String>, vous pouvez le faire:

String[] strings = new String[]{"this", "that"};
Iterable<String> stringIterable = Arrays.asList(strings);
2
Dan Vinton

Iterable<T> est OK, mais il y a un petit problème. Il ne peut pas être utilisé facilement dans stream(), c'est-à-dire les expressions lambda.

Si vous le souhaitez, vous devriez obtenir son spliterator et utiliser la classe StreamSupport()

0
slavpetroff