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/

私たちはビデオを録画しました。だれかがそのリンクを公開してくれたら嬉しいです。



All Articles