Одним из простых решений было бы создание карты символов с соответствующим установщиком в классе Book:
private static final Map<Character, BiConsumer<Book, String>> CODE_TO_SETTER =
new HashMap<>();
static
{
CODE_TO_SETTER.put('*', Book::setTitle);
CODE_TO_SETTER.put('@', Book::setAuthor);
// plus any others you want
}
Затем, пока вы перебираете строки, каждый раз создавайте новую книгу#index
и вызывайте установщик в текущей книге для каждой строки, начинающейся с символа хеша:
Book book = null;
while (fileRead != null) {
if (fileRead.startsWith("#index"))
{
if (book != null) // we're finished with the current book
{
books.add(book);
}
book = new Book();
}
else if (fileRead.startsWith("#"))
{
CODE_TO_SETTER.get(fileRead.charAt(1)).accept(book, fileRead.substring(3));
}
}