JDK8 Lambda その他いろいろ なんでもいいから動かしてみる その5
今日もしつこく JDK8 の新機能を試してみます。
今回は最も高価な売り物を表示させてみましょう。
では昨日のプログラムを下記のように変更してみましょう。
mylambdaexamples\MyLambdaExamples.java |
64 65 66 67 68 69 70 71 72 73 74 75 |
// 最も高価な売り物 System.out.println("\n<-- 最も高価な売り物 -->"); Optional<Sale> mostCostlySale; Comparator<Sale> byCost = comparing((ToDoubleFunction<Sale>) Sale::getCost) .reverseOrder(); mostCostlySale = sales.sorted(byCost) .findFirst(); if (mostCostlySale.isPresent()) { System.out.println((int)mostCostlySale.get().getCost() + "円 " + mostCostlySale.get().wristwatch.getBrand() + " " + mostCostlySale.get().wristwatch.getModel()); } |
また、Optional , ToDoubleFunction , findFirst() が出てきましたね。
ToDoubleFunction は ToIntFunction の double バージョンのようです。
Sale クラスのインスタンスを売り値が高価な順にソートして、さらにそれを sales ストリームのソートの引数に、
そして、findFirst() メソッドによって最初に格納されている最も高価な売り物を Optional<Sale> mostCostlySale に代入。
71 行目で isPresent() メソッドで目的の最も高価な売り物の要素があるか確認して表示させてるようです。
無い場合の処理は省略してます。
昨日と今日で Optional と ToIntFunction , ToDoubleFunction , findFirst() , isPresent() の使いどころを少しだけ理解できたような気がします。
それでは気になるプログラムの実行結果は次のようになります。
<– 最も高価な売り物 –>
1000000円 ティファニー ポーセリン
期待通りの結果が得られてます。
便利ですね!
でも、この「JDK8 Lambda その他いろいろ なんでもいいから動かしてみる」シリーズはインターネット上で得た情報を元にそれを少し変更しているだけです。
悲しいことにその情報源は英語なので詳しい内容はわかりません。
よって私の推測で解釈された内容となってますので間違いがあると思います。
Java8 もまだ build83 を使用していますので API の変更により記述方法が変わるかもしれません。
早く正式リリースされて日本語でこの超便利で素敵な新機能を勉強したい今日この頃です。
TAGS: Java | 2013年4月6日6:00 AM | Comment : 0