我试着环顾一下这里和谷歌的一些人,但不幸的是什么都找不到。
这是我的代码:
class DeleteLists
{
public static void main(String[] args)
{
TokenAuth auth = new TokenAuth("xxxxx", "xxxxx");
JKippt jkippt = new JKippt(auth);
ClipList[] lists = jkippt.getLists();
for (int i = 0; i <= lists.length - 1; i++)
{
if (lists[i].isPrivate() == false);
{
{System.out.println(lists[i].getTitle);
jkippt.deleteList(lists[i].getId());
}
}
}
}
当我尝试编译它时,它会输出:
DeleteLists.java:18: error: incompatible types
ClipList[] lists = jkippt.getLists();
^
required: ClipList[]
found: Iterator<ClipList>
这很可能是一个非常基本的错误,但我在这里做错了什么?
非常感谢您提前! 伊甸。
答案 0 :(得分:8)
此方法返回Iterator
:
Iterator<ClipList> it = jkippt.getLists();
while (it.hasNext()) {
ClipList clipList = it.next();
// do stuff with clipList
}
决定从API方法(特别是名为Iterator
的方法)返回getLists()
是一个奇怪的决定,如果它返回List
或{{1}会更好(或至少Collection
)。如果情况如此,可以使用它:
Iterable
答案 1 :(得分:1)
getLists()
方法返回Iterator
个ClipList
个元素。
库项目页面中有更多示例:https://code.google.com/p/jkippt/
免责声明:我是图书馆的作者。
答案 2 :(得分:0)
该方法返回Iterator,而不是数组。要遍历迭代器的元素,可以使用while循环:
Iterator<ClipList> iter = jkippt.getLists();
while (iter.hasNext()) {
ClipList list = iter.next();
...
}
答案 3 :(得分:0)
您必须使用Iterator
循环:
for (Iterator<ClipList> i = jkippt.getLists(); i.hasNext(); ) {
ClipList list = i.next();
if (!list.isPrivate()) {
System.out.println(list.getTitle);
i.remove();
}
}
请注意,您的代码中存在错误 - if
后面有一个错误的分号,这会导致if
语句出现空块。
此外,你的这一行可能会抛出ConcurrentModificationException
:
jkippt.deleteList(list.getId());
所以我通过remove()
方法将其更改为使用迭代器删除的正确方法。
另请注意,此处更改为使用if (!list.isPrivate())
而不是if (list.isPrivate() == false)
,这会造成不必要的混乱。
答案 4 :(得分:0)
如上所述,getLists()返回一个迭代器。您可以使用以下代码示例将其转换为arraylist:
Iterator<String> lists = jkippt.getLists();
List<String> result = new ArrayList<String>();
while (list.hasNext())
result.add(list.next());
这里result
是你的arraylist。如果您想将其转换为数组,建议您访问主题ArrayList to array