前回ラムダ式を見てみましたが、その他の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 = Arrays.asList(“Tokyo”,”Kanagawa”,”Saitama”,”Kanagawa”);
list.stream()
.distinct()
.sorted((a,b)->a.length()-b.length())
.forEach(System.out::println);
}

4つの要素の入ったListからStreamを生成し、重複を省いて、文字の短い順に並べて、順次コンソール出力する例です。

Tokyo
Saitama
Kanagawa

for文書かかなくていいのが素敵です。

その他

パフォーマンスが改善してたり、JavaScriptが実行できたりいろいろあるのですが疲れたのでここまでですw