请注意这是一个错误的问题。我之所以问这个问题是因为当我尝试使用Iterator时,我的IntelliJ对“Iterator”保持警惕,说Iterator没有类型参数,这不是真的。
不知何故,我的IntelliJ似乎显示了java 1.4的javadoc。我还在努力解决它。感谢。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^
我参与了一个java程序,其中api返回一个List。
我处理这个问题的方法是:
ArrayList<SomeObject> arrayList = new ArrayList<>(apiThatReturnsAList);
for (SomeObject someObject : arrayList) {
...
}
我的代码审核人员认为这可能是一种处理它的效率较低的方法,因为它会复制数据。他建议我使用Iterator。但我发现代码会是这样的:
Iterator iterator = apiThatReturnsAList.iterator();
while (iterator.hasNext()) {
SomeObject someObject = (SomeObject)iterator.next();
}
这里有丑陋的演员,我们不想看,因为它不安全。
那么,有没有一种有效的方法来处理这个api而不是复制数据呢?
谢谢!
答案 0 :(得分:4)
只需使用期望的类参数化迭代器:
Iterator<SomeObject> iterator = apiThatReturnsAList.iterator();
当您致电SomeObject
时,您将获得next()
个实例:
Iterator<SomeObject> iterator = apiThatReturnsAList.iterator();
while (iterator.hasNext()) {
SomeObject someObject = iterator.next();
}
答案 1 :(得分:4)
为避免复制,您可以将foreach
用于apiThatReturnsAList
for (SomeObject someObject : apiThatReturnsAList) {
...
}
事实上,foreach
与引擎盖下的迭代器做同样的工作JLS 14.14.2. The enhanced for statement
答案 2 :(得分:0)
使用for-each打印apiThatReturnsList
:
for (SomeObject element : apiThatReturnsList) {
System.out.println(element);
}
无需将列表复制到另一个列表中。