使用另一个数组

时间:2017-10-08 20:06:10

标签: java arrays

前言:我对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;
        }
    }

3 个答案:

答案 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("|");