因此,在C#中,我可以将string[]
视为IEnumerable<string>
。
是否有Java等价物?
答案 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()
。