前回ラムダ式を見てみましたが、その他のJava8追加機能をおさらいしました。
- インターフェースの仕様変更
- コレクションAPIの追加
- 新コレクションStreamの追加
もっといっぱいありますが、メジャーどころてことで…。
とりあえずひとつずつ見ていきます。
インタフェースの仕様変更
Java8からインタフェースのデフォルトの実装を記述できるようになりました。
public interface MyInterface{ default public int add(int i1,int i2){ return i1 + i2; } } public class MyClass implements MyInterface{ // 何も実装しなくてもOK! }
一部共通、一部が独自の実装になるようなデザインのときにabstractのclassを使わずにinterfaceが利用できますね。
コレクションAPIの追加
ラムダ式の例のときにしれっと使いましたが、java.util.Listにsortというメソッドが足されてます。
定義を参照すると、
default void sort(Comparator<? super E> c)
ComparatorはFunctionalInterfaceなので、ここでラムダ式が使えるってわけです。sortの引数に評価式をラムダ式で渡すことでListがソートされるって仕組みなわけ。
そんな感じで、ラムダ式を渡せるreplaceAll、forEachなんかも使えるようになりました。
新コレクションStreamの追加
ListやらMapやらにラムダ式のインタフェースが追加されて便利になったわけですが、新しいコレクションjava.util.stream.Streamはよりラムダ式との親和性が高いです。
Listは位置で、Mapはキーで特定要素にアクセスできますが、Streamは読んで字のごとし、頭から流れるように全要素を見ていくのが大原則のようです。
public static void main(String[] args){
List
list.stream()
.distinct()
.sorted((a,b)->a.length()-b.length())
.forEach(System.out::println);
}
4つの要素の入ったListからStreamを生成し、重複を省いて、文字の短い順に並べて、順次コンソール出力する例です。
Tokyo Saitama Kanagawa
for文書かかなくていいのが素敵です。
その他
パフォーマンスが改善してたり、JavaScriptが実行できたりいろいろあるのですが疲れたのでここまでですw