ListResultBean
ListResultBeanとは?
DBfluteにおけるリスト検索などで戻されるリスト型の結果オブジェクトです。通常は、あまり意識する必要はなく、扱う型として java.util.List を利用していれば問題ありませんが、時々、力を発揮するかもしれません。(PagingResultBeanのスーパークラスとしても利用される)
会話上では、りすとりざるとびーん と表現します。
java.util.Listの実装クラス
java.util.List を実装しているため、他のリスト型と同様に扱うことができます。
java.util.ArrayListをラップ
内部的に java.util.ArrayList をラップして、java.util.List の仕様を実現しているため、リストとしての仕様は ArrayList と基本的に同じです。List インターフェースのメソッドの実装は、ラップしている ArrayList に委譲しています。
(幾つかの)検索情報を保持
検索結果だけでなく、さらに(幾つかの)検索情報のプロパティを保持しています。
汎用的なリスト操作を備える
さらに、汎用的なリスト操作を行うメソッドを備えています。
プロパティ
ListResultBeanが保持しているプロパティは以下の通りです。
- tableDbName
- 検索の基点となったテーブルの名前
- allRecordCount
- 保持しているリストの件数
- selectedList
- 保持しているリストそのもの
- orderByClause
- 検索時のソート情報 (基本的に、CBによる検索のみ)
あまり、純粋な ListResultBean として利用する場合に、これらを役に立てることは少ないかもしれません。 ListResultBean を継承する PagingResultBean を利用する際に意識する機会が増えるでしょう。
メソッド
グルーピングMap
例えば、リストの中身が {A, B, C, D, E, f, G, H, I, J} とあった場合に、{[A, B, C], [D, E, f], [G, H, I], [J]} というように、ある決まった規則でグルーピングされた(ネストした)構造に変換(コントロールブレイク)したいという場合に、 ListResultBeanのメソッドを使ってこれを実現できます。
ListResultBeanの groupingList(GroupingListDeterminer) を利用します。GroupingListDeterminer にて、一つのグループを区切る判定をします。
e.g. 3 件ずつでグルーピング(row の型は ArrayList) @Java
ListResultBean<Member> memberList = memberBhv.selectList(cb);
List<List<Member>> groupingList = memberList.groupingList(new GroupingListDeterminer<Member>() {
int count = 0;
public boolean isBreakRow(GroupingListRowResource<Member> rowResource, Member nextEntity) {
++count;
return count % 3 == 0;
}
});
e.g. 会員名称の先頭文字でグルーピング(row の型は ArrayList) @Java
ListResultBean<Member> memberList = memberBhv.selectList(cb);
List<List<Member>> groupingList = memberList.groupingList(new GroupingListDeterminer<Member>() {
public boolean isBreakRow(GroupingListRowResource<Member> rowResource, Member nextEntity) {
Member currentEntity = rowResource.getCurrentEntity();
String currentInitChar = currentEntity.getMemberName().substring(0, 1);
String nextInitChar = nextEntity.getMemberName().substring(0, 1);
return !currentInitChar.equalsIgnoreCase(nextInitChar);
}
});
グルーピングMap
とあるキーでグルーピングされた Map を戻す groupingMap(GroupingMapDeterminer) もあります。例えば、会員リストを、会員ステータスコードをキーにしたMapに分割することができます。
e.g. 会員ステータスコードでグルーピング @Java
ListResultBean<Member> memberList = memberBhv.selectList(cb);
Map<String, List<Member>> groupingMap = memberList.groupingMap(new GroupingMapDeterminer<Member>() {
public String provideKey(Member entity) {
return entity.getMemberStatusCode();
}
});
マッピングList
TODO jflute now writing