Skip to content

Instantly share code, notes, and snippets.

@gakuzzzz
Last active December 12, 2015 03:09
Show Gist options
  • Save gakuzzzz/4705146 to your computer and use it in GitHub Desktop.
Save gakuzzzz/4705146 to your computer and use it in GitHub Desktop.
副作用持ちだけどAccumulableIterationCallback作れる。
import javax.annotation.Nonnull;
import org.seasar.doma.jdbc.IterationContext;
import org.seasar.doma.jdbc.PostIterationCallback;
import com.google.common.base.Optional;
// ThreadUnsafe
// 同一インスタンスの再利用不可
public abstract class AccumulableIterationCallback<ACCUM, RECORD> implements PostIterationCallback<ACCUM, RECORD> {
private Optional<ACCUM> accumulator = Optional.absent();
public abstract ACCUM initialValue();
public abstract ACCUM iterate(@Nonnull final ACCUM accumulator, @Nonnull final RECORD record, @Nonnull final IterationContext context);
@Override
public final ACCUM iterate(@Nonnull final RECORD record, @Nonnull final IterationContext context) {
final ACCUM accum = accumulator.or(initialValue());
final ACCUM result = iterate(accum, record, context);
accumulator = Optional.of(result);
return result;
}
@Override
public ACCUM postIterate(@Nonnull final ACCUM accum, @Nonnull final IterationContext context) {
return accumulator.or(initialValue());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment