前言:我对java很糟糕,只是学习。搜索了一吨,找不到答案。我们不能使用arraylists。
我有一个Book类,其中包含特定书籍中的信息,如页面,作者等。
我有一个Bookshelf类,它读入一个Book对象数组。我需要编写一个接受作者姓名的方法,查找Book数组中该作者的所有书籍,然后返回这些书籍的数组。
我的计划是查找该作者的书籍总数并将其存储在变量中。然后创建一个该大小的新数组。我只是不知道如何从Book数组中取出选择元素并将它们放入新数组中。
到目前为止,我不知道它是否正确...
public Book[] getBooksByAuthor(String author) {
int count = 0;
String a = author;
for(int i = 0; i < books.length; i++){
if(books[i].getAuthor().equals(a)){
count += 1;
}
}
答案 0 :(得分:4)
Java 8的流程为您提供了一种非常优雅的方式:
public Book[] getBooksByAuthor(String author) {
return Arrays.stream(books)
.filter(b -> b.getAuthor().equals(author))
.toArray(Book[]::new);
}
答案 1 :(得分:1)
我的最终结果:
public Book[] getBooksByAuthor(String author) {
int count = 0;
String a = author;
int iter = 0;
for(int i = 0; i < books.length; i++){
if(books[i].getAuthor().equals(a)){
count += 1;
}
}
Book[] newBooks = new Book[count];
for (int i = 0; i < books.length; i++){
if(books[i].getAuthor().equals(a)){
newBooks[iter] = books[i];
iter += 1;
}
}
return newBooks;
}
答案 2 :(得分:0)
如果你不能使用数组,你可以这样做:
String booksFromAuthor = "";
for(final String book : books){
if(book.equals(author))
booksFromAuthor += book + "|";
}
return booksFromAuthor.split("|");