2013

JDK8 Lambda その他いろいろ なんでもいいから動かしてみる その4

Java

今日もちょこっとだけ JDK8 の新機能と戯れてみます。

昨日はロレックスの売買を全て表示させてみました。

今日は一番若い買い手を表示させてみます。

mylambdaexamples\MyLambdaExamples.java

Optional , ToIntFunction , groupingBy() , findFirst() , isPresent() など見たことのないものが出現しました。

 

Optional は JavaDoc では下記のように説明されてます。

java.​util

public final class Optional<T> extends Object

A container object which may or may not contain a non-null 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

英語なので良く解りません。(>_<。)

isPresent() メソッドと get() メソッドで操作される便利なパブリックでファイナルなクラスのようですね。(なんじゃこりゃ!)

 

ToIntFunction は JavaDoc ではどのように説明されてるのかみてみましょう。

java.​util.​function

@FunctionalInterface
public interface ToIntFunction<T>

Apply a function to the input argument, yielding an appropriate result. This is the int-bearing specialization for Function.

パラメータ:

T – the type of input objects to the function

日付:

1.8

参照:

Function

当然これも英語ですね。

@ FunctionalInterface となってます。

ToIntFunction <T>が、適切な結果をもたらして、関数を変数に適用します。

これは関数のために int を生む専門化です。

なんか解ったような解らないような・・・

残りの見慣れないものも調べてみましょう。

 

groupingBy()

java.​util.​stream.​Collectors

public static <T,K> Collector<T,Map<K,List<T>>> groupingBy(Function<? super T,? extends K> classifier)

Returns a Collector that implements a “group by” operation on input elements of type T.

Accepts a classification function from T to K. The collector produces a Map whose keys are the set of values resulting of applying the classification function to the input elements, and whose corresponding values are Lists containing the input elements which map to the associated key under the classification function.

No guarantees are made as to the type of the Map or the type of the List used for the map values.

パラメータ:

classifier – The classifier function mapping input elements to keys

型パラメータ:

T – The type of the input elements
K – The type of the keys

戻り値:

A Collector implementing the group-by operation

public static <T,K> Collector<T,Map<K,List<T>>> groupingBy(Function<? super T,? extends K> classifier)が

Tのインプット要素に関して「通り過ぎて分類する」命令を実装するコレクタをリターンするリストがTからKまで分類関数を受け入れます。

コレクタはそのキーが、分類機能をインプット要素に適用することについて、結果として生じる値である、

そしてその対応する値が分類ファンクションの下で提携させられたキーにマップするインプット要素を含んでいるリストであるマップを作成します。

保証がマップの値のために使われるタイプのマップあるいはリストのタイプについて作られません。

 

findFirst()

java.​util.​stream.​Stream

public Optional<T> findFirst()

Return an Optional describing the first element of this stream (in the encounter order), or an empty Optional if the stream is empty.

This is a short-circuiting terminal operation.

戻り値:

もしストリームが空であるなら、このストリームの第1エレメント(遭遇するオーダー)、あるいは空の Optional を記述している Optional を返してください。

これは省いているターミナル操作です。

戻り値:

Optional が、もしストリームが空なら、このストリームの第1エレメント、あるいは空の Optional を記述します

 

isPresent()

java.​util.​Optional

public boolean isPresent()

Return true if there is a value present, otherwise false.

戻り値:

true if there is a value present, otherwise false

もし値が存在するならば真を、そうでないなら偽をを返してください。

 

以上 JavaDoc を調べてみました。

私が使ってる翻訳支援ソフトでは概ねこのように翻訳されました。

Java7 から日本語の JavaDoc がなくなって非常に残念です。

Java8 で日本語の JavaDoc の復活を熱く激しくもとめます。

では、これらのことを踏まえて今回のプログラムを実行させてみます。

<– 一番若い買い手を表示 –>
武井 咲, 19歳

おおっ!何が何だか良く解らんけどちゃんと正解が表示されました。(ヲヒ

詳しくは理解できないけどプログラムのコードと JavaDoc とを照らし合せてみると何となく理解できそうです。

でも、これってフィルタリングとソートでもいけそうな気が・・・

まだまだ新機能のメリットを理解しなければ・・・

それでは次回へ続く(まだ続くのか・・・)

Hatena タグ:

JDK8 Lambda その他いろいろ なんでもいいから動かしてみる その3

Java

さぁ、今日も Java8 に備えて適当に何かをうごかしてみよう(~_~;)

ということで昨日のプログラムに、ロレックスの売買を全て表示させてみようと思います。

filter() メソッドでフィルタリングしてリストを作り直して表示させているだけという非常にシンプルなコードです。

mylambdaexamples\MyLambdaExamples.java

こんなにシンプルでいいのかな?って思ってしまいます。

実行結果は次のようになります。

<– ロレックスの売買を全て表示 –>
ロレックスを売った人は、壇 蜜     ロレックスを買った人は 柴田恭平     購入金額は、400000円です。
ロレックスを売った人は、綾瀬 はるか     ロレックスを買った人は 深田恭子     購入金額は、300000円です。

このように Java8 は開発者に面倒なコードを非常にシンプルに記述できる素敵な贈り物になるであろう。

なんてね (*^▽^*)

さぁ、明日は何を試そうかな。

Hatena タグ:

JDK8 Lambda その他いろいろ なんでもいいから動かしてみる その2

Java

今日は注目の新機能 StringJoiner を使ってみます。

Wristwatch のブランドを全て表示させます。

その際に、” , “ で連結させて表示させてみましょう。

非常に簡単に実装可能なので便利に使えそうです。

では、昨日のプログラムにコードを追加します。

mylambdaexamples\MyLambdaExamples.java

非常にシンプルなコードですね。(^_^)

実行結果は次のようになります。

<– Wristwatch ブランドを全て表示 –>
ロレックス , カルティエ , ティファニー , チュードル , オメガ

JDK8 は至れり尽くせりの便利な機能が満載かもしれませんね!

Hatena タグ:

JDK8 Lambda その他いろいろ なんでもいいから動かしてみる

Java

今年の九月九日に Java8 がリリースされる予定なのでいろいろネットで情報をGETしては解らないまま動かして遊んでいます。

ということで、またもやグッドな情報源を得たのでそれを元にいろいろ動かして自己満足しようとします。( ̄。 ̄;)

情報源は英語なので詳しいことは解りません。

ただ「門前の小僧習わぬ経を読む」のようにひたすらサンプルを拾い集めて Java8 のリリースまでに少しでも新機能に馴染んでいこうと思います。

よって、詳しい解説(簡単な解説も)はありません。

まだ仕様が確定している訳ではないし、バグもたくさんあるでしょうから忙しい人はわざわざ正式リリース前のものに時間を費やす必要はないでしょう。

私は新しいモノ好きなので解らなくても触ってみたい性分なので突っ走ります。

今回のコードは次のようになります。

mylambdaexamples\MyLambdaExamples.java

mylambdaexamples\Person.java

mylambdaexamples\Sale.java

mylambdaexamples\Wristwatch.java

長くてすみません。(゚゚)(。。)ペコッ

今日は Person オブジェクトの要素を全て表示させてみます。

えっ、ちょっと前に同じようなの見たって?

気のせいです!(>_<)

まぁ、慣れるために何回でも・・・

forEach を使って Person オブジェクトの全要素を表示してます。

実行結果は次のようになります。

<– Person 表示 –>
柴田 恭平, 61歳, Gender: MALE
壇 蜜, 32歳, Gender: FEMALE
北川 景子, 26歳, Gender: FEMALE
綾瀬 はるか, 28歳, Gender: FEMALE
佐々木 希, 25歳, Gender: FEMALE
剛力 彩芽, 20歳, Gender: FEMALE
小栗 旬, 30歳, Gender: MALE
堀北 真希, 24歳, Gender: FEMALE
武井 咲, 19歳, Gender: FEMALE
市原 隼人, 26歳, Gender: MALE
深田 恭子, 30歳, Gender: FEMALE

とても素敵ですね。(^_^)

次回はこれをベースに何かします(ヲヒ

続きは Web で!

Hatena タグ:

エイプリルフールだからだよね(;゜ロ゜)

Java

ということで朝食にします。

Hatena タグ:

« 古い記事 新しい記事 »