it-swarm.com.ru

Java Arrays and Generics: Java-эквивалент C # IEnumerable <T>

Поэтому в C # я могу рассматривать string[] как IEnumerable<string>.

Есть ли эквивалент Java?

43
Winston Smith

Iterable<String> является эквивалентом IEnumerable<string>.

Было бы странно в системе типов, если массивы реализованы Iterable. String[] является экземпляром Object[], но Iterable<String> не является Iterable<Object>. Классы и интерфейсы не могут многократно реализовывать один и тот же универсальный интерфейс с разными универсальными аргументами.

String[] будет работать так же, как Iterable в расширенном цикле for.

String[] можно легко превратить в Iterable:

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

Предпочитаю коллекции массивам (в любом случае для не примитивов). Массивы ссылочных типов немного странны и редко нужны с Java 1.5.

47
Tom Hawtin - tackline

Вы ищете Iterable<String>?

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

Iterable <T>

4
Learning

Я считаю, что 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);
2
Dan Vinton

Iterable<T> в порядке, но есть небольшая проблема. Его нельзя легко использовать в stream(), т. Е. Лямбда-выражениях.

Если вы хотите, вы должны получить его spliterator и использовать класс StreamSupport()

0
slavpetroff