NetBeans

NetBeans 8 Dev を使って Lambda で遊ぶ その7

Java NetBeans

今日は substream() メソッドを使ってみます。

これを使って MyLambdaSample プロジェクトの MyLambdaSample.java に MyBestMember を FightingPower 詳細昇順ソート 最初から3人までスキップさせます。

使い方は簡単で substream() メソッドの引数にスキップさせたい要素数を渡せばいいだけです。

コードは下記のようになります。

jp\yucchi\mylambdasample\MyLambdaSample.java

とても便利ですね!

実行結果も確認しておきましょう。

<– MyBeatMember を FightingPower 詳細昇順ソート 最初から3人までスキップする –>
北川 景子, 26歳, Gender : FEMALE, Breast Size : 78, FightingPower : 80
綾瀬 はるか, 28歳, Gender : FEMALE, Breast Size : 88, FightingPower : 85
佐々木 希, 25歳, Gender : FEMALE, Breast Size : 80, FightingPower : 85
石原 さとみ, 26歳, Gender : FEMALE, Breast Size : 82, FightingPower : 89

Java 8 の Lambda とても素敵です。(^_^)

Hatena タグ: ,

NetBeans 8 Dev を使って Lambda で遊ぶ その6

Java NetBeans

今回は limit() メソッドを使ってみます。

MyLambdaSample プロジェクトの MyLambdaSample.java に MyBeatMember を FightingPower 詳細昇順ソート 最初から3人まで とういう機能を実装します。

limit() メソッドを使うと簡単にできてしまいます。( 203 行目 )

jp\yucchi\mylambdasample\MyLambdaSample.java

limit() メソッドの引数に制限数を渡すだけですね。

今回は3人ということなので 3 を渡しています。

実行結果は次のように期待通りの結果となりました。

<– MyBeatMember を FightingPower 詳細昇順ソート 最初から3人まで –>
武井 咲, 19歳, Gender : FEMALE, Breast Size : 76, FightingPower : 66
剛力 彩芽, 20歳, Gender : FEMALE, Breast Size : 77, FightingPower : 75
堀北 真希, 24歳, Gender : FEMALE, Breast Size : 78, FightingPower : 76

便利に使えそうですね。(^_^)

Hatena タグ: ,

NetBeans 8 Dev を使って Lambda で遊ぶ その5

Java NetBeans

今日も Java 8 に備えて良く解らないけど未来のコードと戯れたいと思います。

今回は、Functional Interface と Virtual Extension Methods を試してみたいと思います。

ただ、@FunctionalInterface の使い方がこれであっているのか?解りません(>_<。)

@FunctionalInterface を消しても同じようにコンパイル、実行できてしまうんですよね~

@Override なんかと同じでただの注釈なのかなぁ・・・

メリットが良く解らんぜよw

Virtual Extension Methods は以前にも試したんだけど default キーワードのつく位置が変わったの(決められた)のかな。

さて、それでは試してみます。

jp\yucchi\myfunctionalinterface\MyFunctionalInterface.java

実行結果は次のとおりです。

run:
hoge
foo
bar
BUILD SUCCESSFUL (total time: 0 seconds)

実行結果からみて Functional Interface の動作は定義されているとおりに問題なく動いているようです。

Functional Interface の定義については長くなりますのでググってみてください。

日本語で詳しく説明されているサイトが見つかるはずです。

今回のプログラムでは

Object クラスのこの二つのメソッドがあっても問題ないこと、

この Virtual Extension Methods の default 実装があっても Functional Interface の機能を問題なく実行できることを証明しました。

ちゃんとラムダ式で動いてます。(^_^)

実行結果からちゃんと二つの Virtual Extension Methods も動いているのが解ります。

Java 8 の正式リリースが楽しみですね(*^▽^*)

Hatena タグ: ,

NetBeans 8 Dev を使って Lambda で遊ぶ その4

Java NetBeans

今回は その2 で作ったプログラムの年齢とバストサイズでフィルタリングし、ファイティングパワーで昇順ソートして生成した List を操作してみます。

といっても何も大したことはしていません。

とりあえず下記コードを追加しました。

jp\yucchi\mylambdasample\MyLambdaSample.java

要素数は stream オブジェクトのエレメント数を count() メソッドで取得しただけです。

戻り値が long なので要注意です。

これを利用して新しく生成された List<Integer> オブジェクトを操作して最小値と最大値を求めています。

ここで long の count を int にキャストしているのがちょっとアレですね・・・

もっとスマートな方法があるのかもしれません。

最後は新しく生成された List<Integer> オブジェクトを表示させただけです。

結局、stream でゴニョゴニョやってそれで新しい List にしてしまえば今までどおりチョメチョメ操作できてしまうってことかな?

ほとんど Lambda とは関係ない内容になってますが stream オブジェクトの要素数の取り方ってことでお茶を濁します。( ̄。 ̄;)

あっ、ちなみに実行結果は次のようになります。

<– MyBestMember の FightingPower の要素数を取得 –>
要素数は 7 です。
<– MyBestMember の FightingPower 最初の要素を取得 –>
66
<– MyBestMember の FightingPower 最後の要素を取得 –>
89
<– MyBestMember の FightingPower 全要素を取得 –>
[66, 75, 76, 80, 85, 85, 89]

Hatena タグ: ,

NetBeans 8 Dev を使って Lambda で遊ぶ その3

Java NetBeans

今日も NetBeans 8 Dev を使って Lambda で遊んでみます。

せっかく優秀な統合開発環境を使ってるんだからその機能を使って Lambda の並行処理がちゃんとされているか確認します。

決して疑ってる訳ではございません。

でも、この眼でしっかり確認してみたいだけです。

ってことで昨日作ったプログラムをちょこっと変更して本当に Fork / join Framework が呼び出されているか見てみます。

jp\yucchi\mylambdasample\MyLambdaSample.java

このようにテスト用メンバーを適当に追加して strean() メソッドを使った処理と parallelStream() メソッドを使った場合の違いを確認します。

まず、stream() メソッドを使った時の実行結果は次のようになりました。

run:
<– MyBestMember FightingPower 最大値を表示 –>
19999999
0時間0分41秒8805609010000026
BUILD SUCCESSFUL (total time: 1 minute 0 seconds)

次に昨日のように parallelStream() メソッドを使った場合は

run:
<– MyBestMember FightingPower 最大値を表示 –>
19999999
0時間0分20秒9766124870000006
BUILD SUCCESSFUL (total time: 43 seconds)

このように parallelStream() メソッドを使った方が高速に処理されることが確認できました。

このようにはっきりとした違いが確認できたので次はその仕組みである parallelStream() メソッドを使うと

Fork / join Framework が呼び出されて並行処理をしているところを NetBeans のプロファイラにて暴き出してみてみます。

まず、貧相な stream() メソッドを使った場合からみてみます。

次に贅沢な parallelStream() メソッドを使った場合はこうなります。

このように parallelStream() メソッドを使った場合は  Fork / join Framework が呼び出されているのが解ります。

stream() メソッドの存在価値ってどうなんでしょう?

贅沢な parallelStream() メソッドを使っていればいいのかな?

使い分けシチュエーションがちょっと解りません。

今時、携帯電話さえマルチコアになってるんだからとりあえず parallelStream() メソッドを使っとけばいいのか?

とりあえず Lambda を使えばこのような並行処理プログラミングを意識しないでも簡単に実装できてしまうってことね。

cludia_6_001

Hatena タグ: ,

« 古い記事 新しい記事 »