如何将前一个元素添加到新arraylist的当前索引中

时间:2016-02-09 20:56:38

标签: java

我需要一些帮助,试图找出如何将旧列表中的当前元素添加到新列表中的当前元素

public List<Book> filterBooks(List<Book> readingList, String author)
{
    for(int i = 0; i < readingList.size();i ++)
    {
        List<Book> myList = new ArrayList<Book>();

        if (readingList.get(i).getAuthor().equals(author))
        {
            //how would i add the current element from the old list to the current element in the new list
         }
        readingList = myList;
    }
            return readingList;
}

3 个答案:

答案 0 :(得分:1)

首先,您应该在for循环之外移动列表的创建,因为您不希望每次循环迭代时都创建新列表。假设我理解你问的问题,这应该有效:

public List<Book> filterBooks(List<Book> readingList, String author) {
    List<Book> myList = new ArrayList<>();
    for (int i = 0; i < readingList.size(); i++) {
        if (readingList.get(i).getAuthor().equals(author)) {
            myList.add(readingList.get(i));
        }
    }
    return myList;
}

现在,正如@BoristheSpider所指出的那样,在迭代列表时使用基于索引的循环并不是一个好主意。相反,你应该使用foreach循环

public List<Book> filterBooks(List<Book> readingList, String author) {
    List<Book> myList = new ArrayList<>();
    for (Book book : readingList) {
        if(book.getAuthor().equals(author)) {
            myList.add(book);
        }
    }
    return myList;
}

答案 1 :(得分:0)

您不想在循环内创建myList对象。如果你这样做,那么当循环结束时它将超出范围。

我建议使用&#39;增强型for循环&#39;又称&#39; for:每个循环&#39;如下图所示。

您可以使用行myList.add(currentBook);非常简单地将元素添加到列表中。

public List<Book> filterBooks(List<Book> readingList, String author)
{
    List<Book> myList = new ArrayList<Book>();

    for(Book currentBook : readingList)
    {
        if (currentBook.getAuthor().equals(author))
        {
            myList.add(currentBook);
        }
    }

    return myList;
}

答案 2 :(得分:0)

在Java 8中:

import static java.util.stream.Collectors.toList

public List<Book> filterBooks(List<Book> readingList, String author) {
    return readingList.stream()
        .filter(book -> book.getAuthor().equals(author))
        .collect(toList());
}

在Java&lt; 8

public List<Book> filterBooks(List<Book> readingList, String author) {
    List<Book> myList = new ArrayList<Book>();
    for(Book book : readingList) {        
        if (book.getAuthor().equals(author)) {
            myList.add(book);
        }
    }
    return myList;
}

请注意:

  • 声明循环的<{1}} ;
  • Listreturn;和
  • 使用List循环