@Target(value=METHOD) @Retention(value=RUNTIME) @Documented public @interface CoGroup
この演算子は、二種類のデータをそれぞれ条件に応じてグループ化してリストを作成し、 それらのリストを処理した結果を出力する。
このメソッドは、二つのモデルオブジェクトを要素に取るリスト型
の引数と、
複数の結果オブジェクト型
の引数を取り、
リストの任意の要素について加工を行った後に、
結果オブジェクトに出力を行うプログラムを記述する。
また、それぞれのリスト型の引数にはKey
注釈を指定し、
グループ化
のためのプロパティ名を指定する必要がある
(整列
のためのプロパティ名および整列方向も指定可能である。
指定した場合、引数に渡されるリストはその条件で整列される)。
また、引数には同メソッドで宣言した型変数を利用できるが、 全ての結果オブジェクト型の出力に型変数を含める場合には、 いずれかの入力に同様の型変数を指定してある必要がある。
この注釈を付与するメソッドは、一般的な演算子メソッドの要件の他に、 下記の要件をすべて満たす必要がある。
void
を指定する abstract
例:
/**
* HogeとFooをHogeのIDでグループ化し、重複なしで突合できたもののみを結果として出力する。
* それ以外の値はエラーとして出力する。
* @param hogeList Hogeのグループごとのリスト
* @param fooList Fooのグループごとのリスト
* @param hogeResult 成功したHoge
* @param fooResult 成功したFoo
* @param hogeError 失敗したHoge
* @param fooError 失敗したFoo
*/
@CoGroup
public void checkUp(
@Key(group = "id") List<Hoge> hogeList,
@Key(group = "hogeId") List<Foo> fooList,
Result<Hoge> hogeResult,
Result<Foo> fooResult,
Result<Hoge> hogeError,
Result<Foo> fooError) {
// いずれも存在+重複なしで突合成功
if (hogeList.size() == 1 && fooList.size() == 1) {
hogeResult.add(hogeList.get(0));
fooResult.add(fooList.get(0));
}
// それ以外はエラー
else {
for (Hoge hoge : hogeList) {
hogeError.add(hoge);
}
for (Foo foo : fooList) {
fooError.add(foo);
}
}
}
MasterJoin
,
GroupSort
Modifier and Type | Optional Element and Description |
---|---|
InputBuffer |
inputBuffer
演算子の入力バッファの性質を指定する。
|
public abstract InputBuffer inputBuffer
デフォルトではヒープ上に高速な入力バッファを構築し、巨大なグループに対しての処理は行えない。
InputBuffer
Copyright © 2011–2018 Asakusa Framework Team. All rights reserved.