如何使用迭代器在作为arraylist一部分的对象中查找特定标题

时间:2014-03-07 21:00:29

标签: java object arraylist iterator

我正在尝试使用迭代器在我的数组列表中查找特定对象,然后将字段添加到特定对象。我已将字段标题和格式添加到我的对象中,但我需要在特定对象中添加名称和日期。我的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);
            }
}
}

3 个答案:

答案 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非常紧凑且不那么冗长