Last active
December 12, 2015 03:09
-
-
Save gakuzzzz/4705146 to your computer and use it in GitHub Desktop.
副作用持ちだけどAccumulableIterationCallback作れる。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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