【发布时间】:2010-09-26 14:48:00
【问题描述】:
所以在 C# 中,我可以将 string[] 视为 IEnumerable<string>。
有 Java 等价物吗?
【问题讨论】:
所以在 C# 中,我可以将 string[] 视为 IEnumerable<string>。
有 Java 等价物吗?
【问题讨论】:
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 开始就很少需要了。
【讨论】:
Iterable<T>? -- Java 中等价的yield return 语句是什么?
你在找Iterable<String>吗?
Iterable<T> <=> IEnumerable<T>
Iterator<T> <=> IEnumerator<T>
【讨论】:
Iterable <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() 即 lambda 表达式中轻松使用。
如果你想这样做,你应该得到它的分裂器,并使用类StreamSupport()。
【讨论】: