2011-08-15 8 views
1

私はこのようなコードを持っています。ソートされた結果のシングルフェッチ

String[] idList = request.getParameterValues("id"); 

List list = BookDao.getInstance().getBookList(idList); //select r from Book r where r.id in :idList (using hibernate) 

は、どのように私はあなたのIDの配列と同じように注文する

list.get(0).getId() == id[0] 

と私が正しく理解していればそう

+1

最後の行で何を意味するのかよく分かりません。何を検索したいですか?あなたはすでにリストを持っています! – adarshr

+0

あなたの質問はまだ明確ではない、あなたはオブジェクトのリストを持っています。あなたは1つを取り出してそのIDを取得しました。そしてそれは配列に渡されます。では、「どのようにリストを取得できますか」という意味はどうですか? – Bitmap

+0

彼は、返された項目をidリストのidと同じid-orderでソートすることを望んでいます – Bohemian

答えて

2

それは、この行わを取得するためのコードの1行だけです。

// 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()); 
    } 
}); 

ジョブが完了しました。

+0

ありがとうございました。綺麗な :) – zawhtut

0

に、あなたはあなたの本のリストをご希望のリストを取得することができます。

Map<String, Book> booksById = new HashMap<String, Book>(list.size()); 
for (Object o : list) { 
    Book book = (Book) o; 
    booksById.put(book.getId(), book); 
} 

をそして、ちょうど反復、あなたのIDの配列と同じ順序であなたの本を反復処理するために:

最も簡単な方法は、本のリストをソートすることではなく、マップにそれを変換することではありませんこの配列を通して。正しくNULL値を処理するようにしてください:あなたは、単に再尋ねるあなたのDAOその後、クエリを実行し、できること

for (String id : idList) { 
    Book book = booksById.get(id); 
    // make sure book is not null 
} 

注:それは削除されている場合は、それに対応する本を持っていないIDがあるかもしれませんIDによって各書籍のために、それはとにかくセッションキャッシュにする必要がありますので、:あなたはgetBookListまたはあなたが現時点であるコードのいずれかに記載されているフェッチを並べ替えることができ

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 
} 
0

0-nソートを行うと仮定すると、ソートされていない場合は、最初に文字列配列の文字列のリストを作成します。

コードを仮定:

List<String> sortedIds = new ArrayList<String>(); 
for (String s : idList) { 
    sortedIds.add(s); 
} 
Collections.sort(sortedIds); 

今、あなたは本のリストを並べ替える:あなたがこれを行うことができます

String[] idList = request.getParameterValues("id"); 
List<Book> list = BookDao.getInstance().getBookList(idList); 

Collections.sort(books, new Comparator<Book>() { 
    public int compare(Book book1, Book book2) { 
     return book1.getId().compareTo(book2.getId()); 
    } 
} 

を今すぐあなたのリストがで同じである必要があります注文。もう1つの方法はマップを作成することですが、コードの複雑さにもよりますが、これが最適な解決策である場合とそうでない場合があります。結果は、コンパレータ内idListを使用している
並べ替え:

関連する問題