AsakusaFW & Tsurugi Advent Calendar 2021の18日目です。
AsakusaFWにはViewというものがあって、少量データが対象ですが、ユーザー演算子でデータを自由に読むのに使えます。(GroupViewはキーあり、Viewはキー無しという位置づけ)
Viewは複数レコードを対象としていて、JavaのIterableを継承しているので、Iteratorパターンやfor文でループして扱うのが基本です。
for(Iterator i = view.iterator(); i.hasNext();;) {
DataModel model = i.next();
~
}
for(DataModel model : view) {
~
}
一方、Viewは読み込み専用のグローバル変数のようなものを扱いたいときに便利で、そういう使い方をするときは、必ず1レコードだけ存在していると想定してよいでしょう。
そうすると、わざわざループで1レコード取得するのはちょっと冗長です。
ViewはIteratorを取得できるので、view.iterator().next();として1レコード取得したいところですが、AsakusaFWのViewはhasNext()を必ず呼ぶ想定になっているようで、例外が発生してしまいますorz
(この事象はけっこう昔に発見していて、もう直ってると思っていたのに、直っていなかったようですorz)
現状では、地道にループさせるしか方法が無いようです。(ループして1レコードだけ返すメソッドを用意しておけばいい話ではありますが^^;)