JDK8 Lambda その他いろいろ なんでもいいから動かしてみる その7
今日も「JDK8 Lambda その他いろいろ なんでもいいから動かしてみる」シリーズで GO!GO! GO!です。
今回は、条件付きの一番若い買い手の年齢を調べさせます。
前に一番若い買い手を調べさせることに成功してますので特に問題はなさそうです。
今回の条件は、95万円より高価な買い物をしているとしました。
それではプログラムのコードを見てみましょう。
mylambdaexamples\MyLambdaExamples.java |
86 87 88 89 90 91 92 93 94 95 96 |
// 条件付きの一番若い買い手の年齢 System.out.println("\n<-- 条件付きの一番若い買い手の年齢 -->"); OptionalInt ageOfYoungest; ageOfYoungest = sales.filter(sale -> sale.getCost() > 950_000) .map(Sale::getBuyer) .mapToInt(Person::getAge) .sorted() .findFirst(); if (ageOfYoungest.isPresent()) { System.out.println(ageOfYoungest.getAsInt() + "歳"); } |
88 行目で OptionalInt によって年齢 ( int 値 ) を保持させる ageOfYoungest を宣言。
89 行目で条件を設定し、フィルタリングしてます。
90 行目で買い手でストリームを作り直し、
91 行目でさらに年齢 ( int ) でストリームを作り直し、
92 行目でソートして、
93 行目で最初の要素を取得、
94 行目で最初の要素があるかどうかを調べて、
95 行目で 94 行目の if 文が true なら年齢を表示表示させる。
以上のような感じかな?
さて、今回も見慣れない OptionalInt , getAsInt() メソッドが出現してきました。
JavaDoc で調べてみましょう。
OptionalInt
public final class OptionalInt extends Object
A container object which may or may not contain a int
value. If a value is present, isPresent()
will return true
and get()
will return the value.
Additional methods that depend on the presence or absence of a contained value are provided, such as orElse() (return a default value if value not present) and ifPresent()
(execute a block of code if the value is present).
日付:
1.8
コンテナオブジェクトは int の値を持っているかもしれないし、そうでないかもしれない。
もし値が存在しているなら、isPresent () が true を返して、そして get() が値を返すでしょう。
含まれた値の有無に依存する追加のメソッドが orElse () (もし present ではないなら規定値を返してください)と ifPresent () (もし値が存在しているなら、ブロックのコードを実行してください)のように、提供されます。
いつもながら翻訳支援ソフトの翻訳では理解しにくい(;´Д`)
getAsInt()
public int getAsInt()
If a value is present in this OptionalInt
, returns the value, otherwise throws NoSuchElementException
.
戻り値:
the value held by this
OptionalInt
スロー:
NoSuchElementException
– if there is no value present
参照:
もし値が OptionalInt に存在しているなら、 値を返します。そうでなければ、NoSuchElementException ntException を投げます。
ってことで OptionalInt に年齢 (int 値 ) を保持させて、getAsInt() メソッドでその値を取得するってことかな。
なんかシンプルなんだけどまどろっこしい感じもします。
でも、これを Java7 で組もうと思ったらもっと大変ですよね。
やっぱり Java8 ではかなりの革命的変革を迎えることになるんだろうか。(ちょっと大袈裟かも・・・)
あっ、気になる今回のプログラムの実行結果は次のようになります。
<– 条件付きの一番若い買い手の年齢 –>
30歳
ちゃんと期待通りの結果となります。
今回のプログラムも他の手法で組むことができますね。
Java8 ではかなりの柔軟性を持った API が用意されてるようで使いどころが悩ましいという贅沢な悩みを・・・
おっと、それを口にするほど理解を深めた訳でもないし、使いこなしているでもないな。
もっと、もっと楽しまなくては!
では、お約束事項を
この「JDK8 Lambda その他いろいろ なんでもいいから動かしてみる」シリーズはインターネット上で得た情報を元にそれを少し変更しているだけです。
悲しいことにその情報源は英語なので詳しい内容はわかりません。
よって私の推測で解釈された内容となってますので間違いがあると思います。
Java8 もまだ build83 を使用していますので API の変更により記述方法が変わるかもしれません。
早く正式リリースされて日本語でこの超便利で素敵な新機能を勉強したい今日この頃です。
TAGS: Java | 2013年4月8日5:10 AM | Comment : 1