我需要一些帮助,试图找出如何将旧列表中的当前元素添加到新列表中的当前元素
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;
}
答案 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;
}
请注意:
List
新return
;和List
循环