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().