バイト3日目のhashidumeです。 これからよろしくお願います。
まずはjavaで演習用(?)のプログラムを作っています。 そこで理解したことのメモです。
1日目 ListからsubListの作成
課題: 要素にnameとageを持つPersonのListからいろいろな条件でsubListを作成する。
まずは条件ごとにメソッドを作りました。 これを1つのメソッドでということで、条件が比較的少ないんですべての条件を満たす引数を考えつづけて… 結局思いつかず、ヒント(というか答え)をもらって書き直しました。
「Listのすべての要素に対して条件が合うかどうか調べて、真ならばsubListに追加する」という処理は、「条件が合うか調べて」の部分以外は共通なので、条件を調べるだけの機能のインターフェイスを作成し、その実装を引数として渡せば良い。
このときに「調べる」部分の共通する入出力を考えインターフェイスのメソッドの入出力にする。 今回の場合、入力は1つのPersonのインスタンスで出力は真偽値になります。
答え:Compositeパターンを使う。
2日目 CSVファイルの処理
課題:CSVファイルを読み込み、これを表示する。
まずは、ファイルから1文字ずつ読みながら、1文字ずつ判定&表示。 これはフィールドの処理もできないので、すべてのレコードとフィールドをArrayListにしてから表示するようにしました。 これだと、CSVが大きいとメモリ使用量も大きくなるので、それを少しのメモリでも動くようにとのことでした。
Iteratorの実装っぽい感じでhasNext() とnext() を使ってが答えでした。
Iteratorを使うと(たぶん一般的に)メモリの消費量が少なく、すべてを取り出すことなく1要素ずつ処理することもできるので一括処理するより効率的になるとのことでした。 でも、どうしてもランダムアクセスする必要がある場合は使えないのでしょうが。
ということで、バイト3日目の開始です。
