【发布时间】:2017-03-25 04:04:35
【问题描述】:
我已尽我所能搜索,我正在努力寻找这个问题的答案。我有一个 Iterable 对象,我想修改其中的每个项目(我不想添加到它) 具有新值。我试过了
for (T e : list)
{
e = a.get(index);
System.out.println(e);
index--;
}
修改它,但这显然不起作用,因为它是一个 foreach 循环。有人可以告诉我这段代码我做错了什么吗? (这个想法是我试图颠倒我的 Iterable 的项目顺序。)
public class LinkedList<T>
{
Iterable<T> list;
public LinkedList() {} //create an empty list
public LinkedList(Iterable<T> iterable)
{
list = iterable;
}
@SuppressWarnings("unchecked")
public Iterable<T> reverse()
{
Integer size = size();
List<T> a = new ArrayList<T>();
Integer index = size - 1;
for (T e : list)
{
a.add(e);
}
Iterator iterator = list.iterator();
while (iterator.hasNext())
{
T element = (T)iterator.next();
element = a.get(index);
System.out.println(element);
index--;
}
return list;
}
}
【问题讨论】:
-
如你希望迭代完成后有不同的元素?不可能。 Iterables 不是这样工作的。
-
我只想反转Iterable中的元素。那可能吗? @user2357112
-
你可以返回一个“反向迭代器”,但你的代码都没有修改任何东西......这也不是你使用 foreach 循环的事实
-
那么,我该怎么做才能真正修改 Iterable? @cricket_007
-
您不能修改 Iterable 的元素。想象一下,如果可以的话。例如,一个 Iterable 可以在您从网络套接字读取的文本行上。那么你将如何修改它们以扭转它们?答案是你不能。您只能反转 List、数组或任何具有基于索引的 get 和 set 的东西。