JSR 335またはJAVA 8のラムダ式

はじめに


昨日、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 implementation } } 

インターフェイスにdefaultという単語を書くかどうかについて説明します。

ストリーム(バルク)操作


コレクションをより柔軟に使用できるようにするクールなもの。 たとえば、真空の抽象的な例:
 list.stream().parallel().reduce(Math::max).into(newList); 

指定したコンパレータ(ラムダなど)と並行してコレクションを並べ替え、最大要素をフィルター処理し、この値を別のリストに入れました。

新機能の詳細: http : //openjdk.java.net/projects/lambda/

新しい会議について: http : //jug.ru/
私たちはビデオを録画しました。だれかがそのリンクを公開してくれたら嬉しいです。

Source: https://habr.com/ru/post/J155191/


All Articles