はじめに
昨日、JAVA 8のラムダ式に関する
セミナーに参加しました。彼らは多くの興味深いことを話しました。
興味深いのは:
ラムダ式
Comparator<Integer> cmp = (x, y) -> (x < y) ? -1 : (x > y) ? 1 : 0;
左側は、ラムダを定義する必須のインターフェイスです。 正しい表現。 「->」の左側は署名、右側は実装です。
この構造により、面倒なコードが置き換えられます。
Comparator<Integer> comparator = new Comparator<Integer> () { public int compare(Integer x, Integer y) { return (x < y) ? -1 : (x > y) ? 1 : 0; } };
ラムダ式は、任意の機能インターフェイスを実装できます機能インターフェイスは、1つの抽象メソッドを備えたインターフェイスです(詳細は以下を参照)。 Factory.make、Mapper.mapなどの便利なインターフェイスも追加されます。 まあ、使用とアプリケーションのより多くの柔軟な可能性。
ラムダを手動で記述する代わりに、他のクラスから実装を取得することもできます。
Comparator<Integer> comparator = LibraryComparator::compare;
デフォルトのメソッド(ディフェンダー)でインターフェースを拡張する
はい。現在、インターフェースメソッドは、抽象(実装なし)と抽象(デフォルト)に分けられており、これらにはデフォルトの実装があります。 このイノベーションは、基本的なJAVAエンティティのインターフェース、および実際に互換性をサポートするすべてのインターフェースの拡張を簡素化することが認められています。 たとえば、古いインターフェイスがあります。
public interface OldInterface { void method(); }
拡張する必要がありますが、古いコードが引き続き機能するためです。 デフォルトのメソッドを追加します。
public interface OldInterface { void method(); void newMethod() default {
インターフェイスにdefaultという単語を書くかどうかについて説明します。
ストリーム(バルク)操作
コレクションをより柔軟に使用できるようにするクールなもの。 たとえば、真空の抽象的な例:
list.stream().parallel().reduce(Math::max).into(newList);
指定したコンパレータ(ラムダなど)と並行してコレクションを並べ替え、最大要素をフィルター処理し、この値を別のリストに入れました。
新機能の詳細:
http :
//openjdk.java.net/projects/lambda/新しい会議について:
http :
//jug.ru/私たちはビデオを録画しました。だれかがそのリンクを公開してくれたら嬉しいです。