Java阵列&amp;泛型:Java等效于C#IEnumerable <t> </t>

时间:2008-12-12 10:10:57

标签: java arrays generics

因此,在C#中,我可以将string[]视为IEnumerable<string>

是否有Java等价物?

5 个答案:

答案 0 :(得分:47)

Iterable<String>相当于IEnumerable<string>

如果数组实现了Iterable,那么在类型系统中这将是一个奇怪的现象。 String[]Object[]的实例,但Iterable<String>不是Iterable<Object>。类和接口不能多次使用不同的泛型参数实现相同的通用接口。

String[]可以像增强型for循环中的Iterable一样工作。

String[]可以轻松转换为Iterable

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

首选集合而不是数组(无论如何都是非基元)。引用类型的数组有点奇怪,自Java 1.5以来很少需要。

答案 1 :(得分:8)

您在寻找Iterable<String>吗?

Iterable<T> <=> IEnumerable<T>
Iterator<T> <=> IEnumerator<T>

答案 2 :(得分:4)

Iterable <T>

答案 3 :(得分:2)

我认为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);

答案 4 :(得分:0)

Iterable<T>没问题,但是有一个小问题。它不能在stream()即lambda表达式中轻松使用。

如果你愿意,你应该得到它的分裂器,并使用类StreamSupport()