Donc, en C #, je peux traiter un string[]
comme un IEnumerable<string>
.
Existe-t-il un équivalent Java?
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.
Recherchez-vous Iterable<String>
?
Iterable<T> <=> IEnumerable<T>
Iterator<T> <=> IEnumerator<T>
Iterable <T>
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);
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()
.