Так что в C# я могу обрабатывать string[]
как IEnumerable<string>
.Java Arrays & Generics: Java, эквивалентный C# IEnumerable <T>
Есть ли эквивалент Java?
Так что в C# я могу обрабатывать string[]
как IEnumerable<string>
.Java Arrays & Generics: Java, эквивалентный C# IEnumerable <T>
Есть ли эквивалент Java?
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.
Iterable <T>
Вы ищете Iterable<String>
?
Iterable<T> <=> IEnumerable<T>
Iterator<T> <=> IEnumerator<T>
Я считаю, что эквивалент 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);
Iterable<T>
в порядке, но есть небольшая проблема. Он не может быть легко использован в выражениях stream()
i.e.
Если вы так хотите, вы должны получить его разделитель и использовать класс StreamSupport()
.
Для получения дополнительной информации о _why_ вы не можете бросить между Iterable и Iterable