簡體   English   中英

如何使用迭代器在屬於arraylist的對象中查找特定標題

[英]How to use an iterator to find a specific title in an object that is part of an arraylist

我正在嘗試使用迭代器在數組列表中查找特定對象,然后將字段添加到特定對象。 我已經將字段標題和格式添加到了對象中,但是我需要為特定對象添加名稱和日期。 我的有關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);
            }
}
}

如果使用這種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);
        }
    }
}

我想你打算

while (it.hasNext())

代替

for (MediaItem mi: items)

如果您注意到文檔 ,您會發現可以使用hasNext()檢查Collection是否有Iterator當前指向的項之后的任何項。

然后,使用next()返回元素進行比較的事實,並確保使用if塊實際執行比較。

MediaItem mi = it.next();
if (mi.equals(title)) {
    // do whatever
}

為了遍歷Arraylist,您可以使用for-each循環,也可以使用Iterators進行迭代。 您正在嘗試同時使用它們,但我看不到任何好處。 您想做這樣的事情:

選項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的優勢在於,如果將來說您決定在迭代數組列表時進行修改(例如:標題匹配時刪除MediaItem對象),那么您將無法在選項2中做到這一點(對於-每)。 另一方面,與選項1相比,選項2非常緊湊且不那么冗長

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM