我正在尝试使用迭代器在我的数组列表中查找特定对象,然后将字段添加到特定对象。我已将字段标题和格式添加到我的对象中,但我需要在特定对象中添加名称和日期。我的getter和setter类称为MediaItem。我目前的方式是将名称和日期字段添加到每个对象中。任何帮助理解如何使我的代码只添加到特定对象将非常感激。
public class Library {
static ArrayList<MediaItem> items = new ArrayList<MediaItem>();
static void addNewItem(String title, String format) {
MediaItem b = new MediaItem();
b.setTitle(title);
b.setFormat(format);
items.add(b);
}
static void markItemOnLoan(String title, String name, String date) {
Iterator<MediaItem> it = items.iterator();
for (MediaItem mi : items){
it.next();
it.equals(title);
mi.setLoanedTo(name);
mi.setDateLoaned(date);
}
}
}
答案 0 :(得分:1)
如果使用那种for循环,则不需要Iterator。 另外,it.equals应该是一个“if”语句,它应该与特定字段进行比较。
static void markItemOnLoan(String title, String name, String date) {
for (MediaItem mi : items){
if(mi.getTitle().equals(title)) {
mi.setLoanedTo(name);
mi.setDateLoaned(date);
}
}
}
答案 1 :(得分:0)
我认为你打算这样做
while (it.hasNext())
而不是
for (MediaItem mi: items)
如果您注意到documentation,您会发现可以使用hasNext()
来检查Collection
之后Iterator
中是否有任何项目next()
目前点。
然后,使用if
返回元素进行比较的事实,并确保使用MediaItem mi = it.next();
if (mi.equals(title)) {
// do whatever
}
块实际执行比较。
{{1}}
答案 2 :(得分:0)
对于遍历Arraylist,您可以使用for-each循环或使用迭代器进行迭代。你试图将它们一起使用,我没有看到任何优势。你想做这样的事情:
选项1:
Iterator<MediaItem> it = items.iterator();
while(it.hasNext())
{
MediaItem mi = it.next();
if(mi.getTitle().equals(title))
{
mi.setLoanedTo(name);
mi.setDateLoaned(date);
}
}
选项2:
for(MediaItem mi : items)
{
if(mi.getTitle().equals(title))
{
mi.setLoanedTo(name);
mi.setDateLoaned(date);
}
}
选项1优于选项2的优点是,如果将来你决定在迭代它时修改arraylist(例如:当标题匹配时删除MediaItem对象),那么你将无法在Option中这样做2(for-each)。另一方面,与选项1
相比,选项2非常紧凑且不那么冗长