Если я правильно понимаю, вы бы хотели, чтобы список ваших книг был упорядочен так же, как ваш массив идентификаторов.
Самый простой способ - не сортировать список книг, а преобразовать его в карту:
Map<String, Book> booksById = new HashMap<String, Book>(list.size());
for (Object o : list) {
Book book = (Book) o;
booksById.put(book.getId(), book);
}
А затем, чтобы перебирать книги в том же порядке, что и в массиве идентификаторов, просто перебирайте этот массив. Убедитесь, что правильно обрабатывает пустые значения: может быть идентификатор, для которого нет соответствующей книги, если он был удален:
for (String id : idList) {
Book book = booksById.get(id);
// make sure book is not null
}
Обратите внимание, что вы также можете просто выполнить свой запрос, а затем повторно запросить DAO для каждой книги по идентификатору, поскольку в любом случае она должна быть в кэше сеанса:
BookDao.getInstance().getBookList(idList); // queries for books and populate the session cache
for (String id : idList) {
Book book = BookDao.getInstance().getBookById(id); // no additional query since the book is in cache
// make sure book is not null
}