我有这样的代码。
String[] idList = request.getParameterValues("id");
List list = BookDao.getInstance().getBookList(idList); //select r from Book r where r.id in :idList (using hibernate)
如何检索
列表list.get(0).getId() == id[0]
等等
答案 0 :(得分:2)
只需一行代码即可完成此操作:
使用比较器中的idList对结果进行排序。
// Get the ids as a List so we can use indexOf()
final List<String> ids = Arrays.asList(idList);
// After executing this single line, list will be sorted in idList order:
Collections.sort(list, new Comparator<Book>() {
public int compare(Book o1, Book o2) {
return ids.indexOf(o1.getId()) - ids.indexOf(o2.getId());
}
});
完成工作。
答案 1 :(得分:0)
如果我理解正确,您希望以与ID阵列相同的方式订购您的图书清单。
最简单的方法不是对书籍清单进行排序,而是将其转换为地图:
Map<String, Book> booksById = new HashMap<String, Book>(list.size());
for (Object o : list) {
Book book = (Book) o;
booksById.put(book.getId(), book);
}
然后,以与ID数组相同的顺序遍历您的书籍,只需遍历此数组。确保正确处理空值:如果ID已被删除,则可能存在没有相应书籍的ID:
for (String id : idList) {
Book book = booksById.get(id);
// make sure book is not null
}
请注意,您也可以简单地执行查询,然后按ID重新询问您的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
}
答案 2 :(得分:0)
您可以在getBookList
或您目前的代码中对列出的内容进行排序。
假设你想要0-n排序,首先要为字符串数组创建一个字符串列表,如果它们没有排序的话。
假设代码:
String[] idList = request.getParameterValues("id");
List<Book> list = BookDao.getInstance().getBookList(idList);
你可以这样做:
List<String> sortedIds = new ArrayList<String>();
for (String s : idList) {
sortedIds.add(s);
}
Collections.sort(sortedIds);
现在您对书籍列表进行排序:
Collections.sort(books, new Comparator<Book>() {
public int compare(Book book1, Book book2) {
return book1.getId().compareTo(book2.getId());
}
}
现在您的列表应该按顺序相同。另一种方法是创建地图,但是根据代码的复杂程度,这可能是也可能不是最好的解决方案。