Java Arrays & Generics: Java эквивалентно С# IEnumerable <T>
Итак, в С# я могу рассматривать string[]
как IEnumerable<string>
.
Есть ли эквивалент Java?
Ответы
Ответ 1
Iterable<String>
является эквивалентом IEnumerable<string>
.
Это была бы странность в системе типов, если бы реализованы массивы Iterable
. String[]
является экземпляром Object[]
, но Iterable<String>
не является Iterable<Object>
. Классы и интерфейсы не могут многократно реализовывать один и тот же общий интерфейс с разными родовыми аргументами.
String[]
будет работать так же, как Iterable
в расширенном цикле.
String[]
можно легко превратить в Iterable
:
Iterable<String> strs = java.util.Arrays.asList(strArray);
Предпочитает сбор по массивам (для не-примитивов в любом случае). Массивы ссылочных типов немного нечетны и редко нужны с Java 1.5.
Ответ 2
Вы ищете Iterable<String>
?
Iterable<T> <=> IEnumerable<T>
Iterator<T> <=> IEnumerator<T>
Ответ 3
Iterable <T>
Ответ 4
Я считаю, что эквивалент Java Iterable<String>
. Хотя String[]
не реализует его, вы все равно можете перебирать элементы:
String[] strings = new String[]{"this", "that"};
for (String s : strings) {
// do something
}
Если вам действительно нужно что-то, что реализует Iterable<String>
, вы можете сделать это:
String[] strings = new String[]{"this", "that"};
Iterable<String> stringIterable = Arrays.asList(strings);
Ответ 5
Iterable<T>
ОК, но есть небольшая проблема. Его нельзя легко использовать в выражениях stream()
i.e лямбда.
Если вы этого хотите, вы должны получить его spliterator и использовать класс StreamSupport()
.