使用Iterator将ArrayList添加到java中的另一个ArrayList

时间:2014-11-25 00:02:24

标签: java arraylist

我的代码存在很大问题:

public class BookStore
{
    private ArrayList<Book> books;
}



/**
* This method takes the author's name as a String parameter and returns an
* arraylist of all the books written by that author. It uses a while loop
* and an iterator, locates the books written by that author (case-insensitive)
* and adds them to another arraylist. 
*/
public ArrayList<Book> getBooksByAuthor(String authorName){             
    ArrayList<Book> getBooksByAuthor =  new ArrayList<Book>();
    Iterator<Book> aBook = books.iterator();  
    while(aBook.hasNext()){
        Book aBookd = aBook.next();
        if (authorName.equalsIgnoreCase(aBookd.getAuthor())){  
            books.add(getAuthor());     
            books.addAll(getBooksByAuthor);
        }   
    } 
    return getBooksByAuthor.size();
}

那3行

  • books.add(getAuthor());
  • books.addAll(getBooksByAuthor);
  • return getBooksByAuthor.size();

我很确定他们完全错了。我尝试了不同的方法,但它没有用。我真的不明白该怎么做。有人能帮助我吗?谢谢你的时间!

2 个答案:

答案 0 :(得分:0)

我非常肯定您想要将具有匹配作者姓名的图书添加到新列表中。使用for-each loop

的隐式迭代器的东西
List<Book> al = new ArrayList<>();
for (Book book : books) {
    if (authorName.equalsIgnoreCase(book.getAuthor())) {  
        al.add(book);     
    }   
} 
return al;

或使用明确的Iterator之类的

List<Book> al = new ArrayList<>();
Iterator<Book> iter = books.iterator();
while (iter.hasNext()) {
    Book book = iter.next();
    if (authorName.equalsIgnoreCase(book.getAuthor())) {
        al.add(book);
    }
}
return al;

答案 1 :(得分:0)

是否需要迭代器和while循环而不是foreach循环?

(我认为)你想用正常语言表达的是:我们有一个空的集合/列表作为结果。对于书籍列表中的每本书,检查作者是否具有与给定名称相同的名称 - 如果名称相同,我们将书籍添加到生成的集合/列表中。

在代码中看起来像:

public ArrayList<String> getBooksByAuthor(String authorName) {
    ArrayList<Book> result = new ArrayList<Book>();
    for (Book aBook : books) { //[for each notation in java ][1]
        if (authorName.equals(aBook.getAuthor())) {
            result.add(aBook);
        }
    }
    return result;
}

如果您想使用while循环,请在this link中读取foreach / while循环转换。

此外,如评论中所述,您的代码存在一些语义和语法错误:

  • 您的返回类型错误(int而不是ArrayList)
  • 您的类定义右大括号在方法定义之前结束
  • 您将作者对象(可能是字符串)添加到图书集
  • 您永远不会在最终收藏中添加任何书籍
  • 您尝试将{(1)}个(空)集合addAll对象添加到您的图书中,而不是在您的getBooksByAuthor集合中添加一些/单本图书

    [1] http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html