NetBeans

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

Java NetBeans

先日はシステムプロパティを取得するプログラムを組んでみたけど誰からもツッコミが入らなかったのでこのまま

勝手にイケイケでよくあるサンプルコードを JDK 8 ならこんなになるのかって勝手に思い込む遊びをします。

決して良い子のみんなは真似をしないようにね!

とりかえしのつかないことになるといけないからね(爆

今回は Java 8 について Twitter 上で下記のようなつぶやきがあったのでそれも試してみます。

「みんな、Java8のラムダは飾りでメソッド参照こそ本命ということに気づいてきた」

私は新しく使いやすくなる日付関係の Date and Time API が本命だと気付きました。(^_^;)

これも今回ちょこっとだけ使ってみたいと思います。

開発環境はこの前と同じです。

NetBeans 8 Dev の未来を先取りする賢い補完機能にずいぶん助けられます。

Java 8 を気楽に試してみたい人にはお勧めです。

では、今回試してみたプログラムをご覧ください。

素人が組んだものですから生暖かい眼差しで見て間違ってるところやここはこうしたほうがいいよって優しく教えてくれたら感激です。

jp\yucchi\mylambdasample\MyTeam.java

jp\yucchi\mylambdasample\MyLambdaSample.java

プログラムの内容にはあまり触れないでくださいね。

私の好みの問題ですから(〃・ω・〃)

既に気付かれた方もいるでしょうが Date and Time API を使うと非常にシンプルで直感的に使えます。

細かい説明はしませんので JavaDoc をさらってご覧になってくださいませ。

カレンダー関係に悩まされてきたそこの あ・な・た !

やっとイライラから解放されるかもしれません。

1

カレンダーをセットするのも簡単になってます。(50行目)

2

今まで月の扱いがうざいなぁって思っていたのがやっと解消されますね。

次に、メソッド参照をみてみましょう。

118行目、120行目、128行目、129行目で使ってます。

:: を使った何かしっくりこない違和感の塊がメソッド参照と呼ばれている新機能です。

引数で渡されたオブジェクトのメソッドを呼ぶ機能のようです。

これは単にコード記述量が少なくなるだけなんだろうか?

他に何かメリットがあるのか良く解りません。

今回は static メソッドを使用してますが特定のオブジェクトのインスタンスメソッドや

特定の型の任意のオブジェクトのインスタンスメソッドが使えるようです。

特定のオブジェクトのメソッド参照は、異なる関数型インターフェースに変換する便利な手段を提供します。

任意のオブジェクトのインスタンスメソッド参照は

と引数の数が違います。任意のオブジェクトのメソッド参照には第一引数にインスタンスを渡してます。

要するにラムダ式を書く代わりに既存のメソッドを呼び出すことができるよってことなのかな?

これが Java 8 の本命なのか?

私が知らないもしくは理解が足らないのでもっと便利で素敵な使い方があるのだろうか?

ああ!今日も眠れそうにないなw

3

138行目の sorted メソッドがしっくりこないけどどうしたらいいのか解らないので適当にやったら期待通りに動いてしまった。( ̄。 ̄;)

さて、長くなるけど一応このプログラムの実行結果を載せておきます。

run:
<– MyTeam 全員表示 –>
ほげほげ たこたろう, 32歳, Gender: MALE, Breast Size: 90, FightingPower: 100
壇蜜, 32歳, Gender: FEMALE, Breast Size: 90, FightingPower: 99
北川 景子, 26歳, Gender: FEMALE, Breast Size: 78, FightingPower: 80
綾瀬 はるか, 27歳, Gender: FEMALE, Breast Size: 88, FightingPower: 85
佐々木 希, 25歳, Gender: FEMALE, Breast Size: 80, FightingPower: 85
剛力 彩芽, 20歳, Gender: FEMALE, Breast Size: 77, FightingPower: 75
川口 春奈, 18歳, Gender: FEMALE, Breast Size: 75, FightingPower: 70
堀北 真希, 24歳, Gender: FEMALE, Breast Size: 78, FightingPower: 76
武井 咲, 19歳, Gender: FEMALE, Breast Size: 76, FightingPower: 66
石原 さとみ, 26歳, Gender: FEMALE, Breast Size: 82, FightingPower: 89
深田 恭子, 30歳, Gender: FEMALE, Breast Size: 90, FightingPower: 84
<—MyBestMember –>
北川 景子, 26歳, Gender : FEMALE, Breast Size : 78, FightingPower : 80
綾瀬 はるか, 27歳, Gender : FEMALE, Breast Size : 88, FightingPower : 85
佐々木 希, 25歳, Gender : FEMALE, Breast Size : 80, FightingPower : 85
剛力 彩芽, 20歳, Gender : FEMALE, Breast Size : 77, FightingPower : 75
堀北 真希, 24歳, Gender : FEMALE, Breast Size : 78, FightingPower : 76
武井 咲, 19歳, Gender : FEMALE, Breast Size : 76, FightingPower : 66
石原 さとみ, 26歳, Gender : FEMALE, Breast Size : 82, FightingPower : 89
<– MyBestMember FightingPower 昇順ソート –>
66
75
76
80
85
85
89
<– MyBestMember FightingPower 最大値を表示 –>
89
<– MyBeatMember を FightingPower 詳細昇順ソート –>
武井 咲, 19歳, Gender : FEMALE, Breast Size : 76, FightingPower : 66
剛力 彩芽, 20歳, Gender : FEMALE, Breast Size : 77, FightingPower : 75
堀北 真希, 24歳, Gender : FEMALE, Breast Size : 78, FightingPower : 76
北川 景子, 26歳, Gender : FEMALE, Breast Size : 78, FightingPower : 80
綾瀬 はるか, 27歳, Gender : FEMALE, Breast Size : 88, FightingPower : 85
佐々木 希, 25歳, Gender : FEMALE, Breast Size : 80, FightingPower : 85
石原 さとみ, 26歳, Gender : FEMALE, Breast Size : 82, FightingPower : 89
BUILD SUCCESSFUL (total time: 0 seconds)

では、そろそろ寝ようかな。(眠れたら幸せになれるかも)

Hatena タグ: ,

NetBeans 8 Dev を使って Lambda で遊ぶ

Java NetBeans

NetBeans で Lambda がお気楽に試せる時代がやってきたので今日もちょこっとだけ遊んでみました。

先日チュートリアルを試してみたんだけど途中で上手くいかなかったので今度はシステムプロパティを取得するプログラムを組んでみた。

コードは下記のようにとりあえず Lambda を使わないもので組んだ。

jp\yucchi\printsystemprop\PrintSystemProp.java

実行結果は次のようになる。

java.specification.vendor: Oracle Corporation
java.endorsed.dirs: C:\jdk1.8.0\jre\lib\endorsed
java.vm.specification.version: 1.8
java.vm.specification.name: Java Virtual Machine Specification
java.vendor.url: http://java.oracle.com/
sun.java.launcher: SUN_STANDARD
awt.toolkit: sun.awt.windows.WToolkit
java.vendor: Oracle Corporation
java.io.tmpdir: C:\Users\Yucchi\AppData\Local\Temp\
java.class.path: C:\Users\Yucchi\Documents\NetBeansProjects\PrintSystemProp\build\classes
sun.arch.data.model: 64
user.name: Yucchi
os.version: 6.2
java.vendor.url.bug: http://bugreport.sun.com/bugreport/
os.name: Windows 8
sun.boot.library.path: C:\jdk1.8.0\jre\bin
java.awt.graphicsenv: sun.awt.Win32GraphicsEnvironment
java.library.path: C:\jdk1.8.0\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Java\jdk1.7.0_17\bin;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files (x86)\JustSystems\JSLIB32;C:\Program Files (x86)\Windows Kits\8.0\Windows Performance Toolkit\;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\;.
user.home: C:\Users\Yucchi
sun.os.patch.level:
sun.cpu.isalist: amd64
java.vm.vendor: Oracle Corporation
user.country: JP
java.vm.version: 25.0-b19
path.separator: ;
sun.java.command: jp.yucchi.printsystemprop.PrintSystemProp
java.home: C:\jdk1.8.0\jre
java.runtime.version: 1.8.0-ea-lambda-nightly-h3500-20130225-b79-b00
line.separator:

java.awt.printerjob: sun.awt.windows.WPrinterJob
file.separator: \
sun.io.unicode.encoding: UnicodeLittle
sun.boot.class.path: C:\jdk1.8.0\jre\lib\resources.jar;C:\jdk1.8.0\jre\lib\rt.jar;C:\jdk1.8.0\jre\lib\sunrsasign.jar;C:\jdk1.8.0\jre\lib\jsse.jar;C:\jdk1.8.0\jre\lib\jce.jar;C:\jdk1.8.0\jre\lib\charsets.jar;C:\jdk1.8.0\jre\lib\jfr.jar;C:\jdk1.8.0\jre\classes
java.vm.info: mixed mode
sun.desktop: windows
java.version: 1.8.0-ea
java.class.version: 52.0
java.specification.name: Java Platform API Specification
file.encoding: UTF-8
sun.cpu.endian: little
user.script:
java.vm.specification.vendor: Oracle Corporation
java.vm.name: OpenJDK 64-Bit Server VM
user.dir: C:\Users\Yucchi\Documents\NetBeansProjects\PrintSystemProp
sun.management.compiler: HotSpot 64-Bit Tiered Compilers
java.runtime.name: OpenJDK Runtime Environment
user.variant:
file.encoding.pkg: sun.io
java.specification.version: 1.8
sun.jnu.encoding: MS932
java.ext.dirs: C:\jdk1.8.0\jre\lib\ext;C:\Windows\Sun\Java\lib\ext
user.timezone:
user.language: ja
os.arch: amd64

とりあえずちゃんと取得できているようだ。

このプログラムを NetBeans はラムダ式を使うようにお勧めしてくれます。

Use Functional Operation をクリックすると

1

素敵な未来の Java コードに変換してくれます。

2

さて、このままではおもしろくないので キーが sun からはじまるシステムプロパティだけを取得するようにしてみます。

Stream インタフェースが活躍してくれます。

filter()、forEach() を使ってこのように篩い分けをしてくれます。

慣れるまでは違和感がありますが近い将来はこのようなコードを組む時代がそこまでやってきているようです。

jp\yucchi\printsystemprop\PrintSystemProp.java

実行結果は

sun.io.unicode.encoding: UnicodeLittle
sun.boot.class.path: C:\jdk1.8.0\jre\lib\resources.jar;C:\jdk1.8.0\jre\lib\rt.jar;C:\jdk1.8.0\jre\lib\sunrsasign.jar;C:\jdk1.8.0\jre\lib\jsse.jar;C:\jdk1.8.0\jre\lib\jce.jar;C:\jdk1.8.0\jre\lib\charsets.jar;C:\jdk1.8.0\jre\lib\jfr.jar;C:\jdk1.8.0\jre\classes
sun.management.compiler: HotSpot 64-Bit Tiered Compilers
sun.java.command: jp.yucchi.printsystemprop.PrintSystemProp
sun.arch.data.model: 64
sun.jnu.encoding: MS932
sun.cpu.endian: little
sun.os.patch.level:
sun.desktop: windows
sun.cpu.isalist: amd64
sun.java.launcher: SUN_STANDARD
sun.boot.library.path: C:\jdk1.8.0\jre\bin

とりあえず目的は果たしているようです。

ただし、私はあまり Lambda のことを調べてないので上記のコードで正しいのか自信ありません。

詳しい人がこれをご覧になっていてもっと良い方法があるんでしたらご指摘くださると嬉しいです。

Hatena タグ: ,

NetBeans 8 開発版で JDK 8 EA を使ってみた

Java NetBeans

まだまだ遠いけど、手が届きそうなところまで近づいてきた JDK 8 を試してみます。

統合開発環境を使って動かせるようにも成りつつあるようです。

IntelliJ12でJDK8のlambda

Eclipse で Java8!

そこで我らがヒーロー NetBeans はどういった状況なのか? さっそく試してみました。

次期リリース予定の開発版をダウンロードしてインストールしてみました。

JDK 8 は Java™ Platform, Standard Edition 8 Early Access with Lambda Support と

JDK™ 8 Early Access Releases があります。

後者は前者の成果物を一部マージしたものとなっているようです。(たぶん・・・)

現在は Build b79 となっています。

Java™ Platform, Standard Edition 8 Early Access with Lambda Support を使って NetBeans をインストールしたのですが、

ちょっと問題が発生したので JDK™ 8 Early Access Releases に切り替えました。

JDK の変更は設定ファイルをちょこっと書き換えるだけで簡単にできるので気にしなくていいですね。

1

それでは The Java Tutorials を試してみましょう。

jp\yucchi\Member.java

jp\yucchi\RosterTest.java

コメントアウトしてあるところがあるのですが Mapper インターフェースが無いよって言われます。

JDK を変更しても一緒だったので何か変更されたのか、変更中なのかもしれません。

とりあえずここまではチュートリアル通りに動くようです。

一部コードは変更してあります。

さぁ、それでは、NetBeans の Lambda Expression 対応状況をみてみましょう。

このような匿名クラスを使ってるのをみつけると

2

このように Lambda Expression に変更できますよって親切に教えてくれます。

3

Lambda 使っちゃいますよってポチッってすると

4

これからの Java に変更されます。

5

チュートリアルで Lambda Expression を使う場合のコードと同じですね。(^-^)

6

おまけとして、Java™ Platform, Standard Edition 8 Early Access with Lambda Support を使った場合は

このように Functional Operation をお勧めしてくれます。

なんて親切なんだろう。

7

で、お勧めに従って Use Functional Operation をポチッとクリックすると

8

素敵ですね。拡張 for 文から見慣れない forEach 文を使った構文に変更されてます。

9

filter() を使えばいろいろ便利に使えそうな予感がします。

チュートリアルの充実と JDK 8 及び NetBeans の熟成が楽しみです。(*^O^*)

Hatena タグ: ,

NetBeans で Lambda

Java NetBeans

JDK 8 で待望の? Lambda 式が使えるようになる予定です。

しかし、統合開発環境に慣れ親しんだものとしてはそれを試そうとするのはしんどいですね。

そこで我らがヒーロー、NetBeans が早くも対応をはじめてきたようです。

JDK8 Support in NetBeans

http://wiki.netbeans.org/JDK8

Java™ Platform, Standard Edition 8 Early Access with Lambda Support

http://jdk8.java.net/lambda/

1

ふっふっふっ!

どうだ!と言わんばかりにラムダ式にコンバートするチェックボックスがデフォで ON になってます。

2

さて、本当にコンバートしてくれるか試してみましょう。

ちょっと待て!

今日も明日も夜勤なのにこんなことしてていいのか?!

昨日は大きな災害が発生したというのに・・・

でも気になって眠れないといけないからちょっとだけ(^_^;

 

おおっ! やってくれますね(^^)

ただ、どこまで対応してきるのか興味津々です。

おっと、そういえば Lambda って今の状況がどうなっているんだろう?

今年のお正月休みにでも時間があれば調べてみよう(^^)

楽しみ!楽しみ♪

Hatena タグ: ,

NetBeans 7.3 Beta 2 をとりあえずインストールしてみた

Java NetBeans Solaris

Solaris 11.1 をお試しでインストールしたついでに Java 7 u 10 をインストールして NetBeans 7.3 Beta 2 もインストールしてみた。

1

HTML5 ってのがありますね。

2

サンプルプロジェクトを開いてみました。

とても綺麗に機能的によくできてます。

これでビジュアル編集とかできれば何も言うことはないでしょうが NetBeans のような高機能エディタを使う人は

HTML をガリガリするほうがしっくりくる人種なんでしょう。

3

CSS のプロパティもわかりやすくなってますね。

いたれりつくせりです!

4

プロジェクトを実行させてみようと思ったらこんなダイアログウィンドウが出てしまった(><)

5

どうやら実行可能な環境に足らないものがあるようです。

とりあえず NetBeans 7.3 は HTML5 にも力をいれていくようです。

どんどん進化する NetBeans が楽しみですね(^^)

Hatena タグ: ,,

« 古い記事 新しい記事 »