So-net無料ブログ作成
検索選択

【Java】 Stream API 勉強中

Streamやらラムダ式やらを勉強中。

正直な話、「関数型」についてはあんまりピンと来なかったっていうか、
なんか馬鹿げた論争とか有ってシラけたのでやる気ゼロになってしまった訳ですけれども、
こと「関数を扱う」という指向と言いますか、集合指向と言いますか、
については大いに感じ入る所が有ります。

この辺りイマイチ、ピンと来ない方も居られるかもしれませんが、
集合を扱うとか、コマンドラインのパイプ処理とか、Perlのワンライナー辺りをイメージすると
結構理解が早かったりしますね。
…逆に混乱するかも分からんけど(笑)

とりあえず勉強の一環で
「あるディレクトリをフィールドとして持ち、そのディレクトリを(とある目的で)管理するクラス」
というのを個人的に作っていてですね、
その機能の一部である、「自身のサブディレクトリの幾つかをZipで出力する」機能をリファクタリングしてみました。

例での使い方はE:/RootDirの下にsubdir1~nまで有る内の2つをZip圧縮しています。
元のソース(※)からすると大分スッキリした感じですが、もうちょっと何とか出来そうな気もしています。

※ 元のソースは面倒なんで載せませんっていうか、ローカルに持ってないのです。

関数型インターフェイスの実装をメソッドに渡して別の関数型実装とクロスさせて使ったりするのが
本領だと思うんですがそこまでは至ってないですね。
まぁ昨日今日の突貫知識なので許してちょ。

entryArchiveのところで例外食いつぶしてますが、もちろんワザとです。
圧縮出来るものだけ圧縮するイメージですね。
もちろん一個失敗したらもう止めってのも良いと思いますけど、この場合はそんな必要もないかなと。
(失敗する可能性も低いでしょうし、失敗する場合は全部失敗するでしょう。)
本気でやるならゴミを削除する処理とかも必要でしょうかね。。。

ただこのStream APIですけど、やはりワンライナーよろしくやり過ぎると可読性が一気に下がります。
第三者から見たら何やってんだかさっぱり分からなくなる訳ですね。
その辺のバランス感覚を保ちつつ程々で手を打つのがポイントかと思います。


ソースは長くなったので次の記事で。
(ソネブロのうんこ仕様により一部全角となっております)
コメント(0) 
共通テーマ:資格・学び

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。