Asakusa Framework : GroupSortのハマりやすいところ

f:id:teppei-studio:20131112202621j:plain

Asakusa Frameworkシリーズ、お次はGroupSortです。

これまでの記事はこちらです。

GroupSortも、MasterJoinに並んで頻繁に利用される演算子のひとつだと思います。

Listのアウトプットもできる!

これはねぇ、やられましたよ。
分からんよ、これは、という感じです。

/**
 * レコードHogeを名前ごとに年齢の若い順に並べ、先頭と末尾だけをそれぞれ結果に流す。
 * @param hogeList グループごとのリスト
 * @param first グループごとの先頭要素
 * @param last グループごとの末尾要素
 */
@GroupSort
public void firstLast(
        @Key(group = "name", order = "age ASC") List<Hoge> hogeList,
        Result<Hoge> first,
        Result<Hoge> last) {
    first.add(hogeList.get(0));
    last.add(hogeList.get(hogeList.size() - 1));
}

公式ドキュメントで上記のような実装例を見せられたら、Resultは単一レコードしか返せないと思いません??

できるんです、これが。

こんな感じです。

@GroupSort
public void firstLast(
        @Key(group = "name") List<Hoge> hogeList,
        Result<Hoge> result) {
    result.add(hogeList.get(0);
    result.add(hogeList.get(1);
    result.add(hogeList.get(2);
}

これで、hogeList一件あたりで、resultは3件返る処理を実装できます。

やー、良かった。でも分かりにくい。