2017-10-08 92 views
4

前言:我對java很害怕,只是在學習。搜索了一噸,找不到答案。我們不能使用數組列表。使用另一個數組的選擇元素創建一個新數組

我有一本書類,它包含在一個特定的書頁一樣,作者信息等

我有一個書架類圖書中的對象的數組讀取。我需要編寫一個接受作者名稱的方法,查找作者所在的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

到目前爲止看起來不錯,現在您需要創建一個新數組並重新迭代以將元素添加到新數組 – UnholySheep

+2

到目前爲止這是正確的。你知道如何使用'count'變量創建數組嗎? –

+0

Book [] newBooks = new Book [count];將會產生一個新的大小數組。 但如果我再次循環並將值分配給新數組,我可能會創建一些空的索引,因爲沒有匹配,如果這是有道理的。 – Lambtron

回答

4

的Java 8的流給你這樣做的相當優雅的方式:

public Book[] getBooksByAuthor(String author) { 
    return Arrays.stream(books) 
       .filter(b -> b.getAuthor().equals(author)) 
       .toArray(Book[]::new); 
} 
+0

我只會說「Java」,而不是「Java 8」,因爲Java 8現在已經很老了,可以認爲是現在每個人都使用的版本。 – Bohemian

+0

@Bohemian不正確。例如,如果你的學校仍然使用6年前發佈的並在2.5年前被取代的Java版本,那麼我的學校(這裏是瑞士的一所優秀工程師學校)仍然使用java 7 ... –

+0

@paul,那麼它就是不是一所好學校。很少有僱主會繼續使用第7版,所以你的「好」學校教授的或多或少的失業技能。 – Bohemian

0

如果您不能使用數組,你可以這樣來做:

String booksFromAuthor = ""; 
for(final String book : books){ 
    if(book.equals(author)) 
     booksFromAuthor += book + "|"; 
} 
return booksFromAuthor.split("|"); 
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; 
} 
相關問題