SE8 Iterableインタフェース

SE7までIterableインタフェースにはiterateメソッドしか定義されていなかった。
SE8ではIterableインタフェースに次の2つのデフォルトメソッドが追加された。
 ・default void forEach(Consumer action)
 ・default Spliterator spliterator()

forEach()メソッドは拡張for文の内部イテレータ版になる。
forEach()メソッドの引数の型はjava.util.function.Consumerインタフェースとなっている。
forEach()メソッドの内部処理は次のようになっている。

for (T t : this)
    action.accept(t);

Consumerインタフェースには次の2つのデフォルトメソッドがある。
 ・void accept(T t)
 ・default Consumer andThen(Consumer after)

Consumerインタフェースでは、accept()メソッドで処理を定義する。
また、andThen()メソッドはaccept()の処理後に続けて処理を実行する合成Consumerを返す。

List<String> texts = ...;

// 拡張for文
for (String text: texts) {
    System.out.println(text);
}

// forEach + 匿名クラス
texts.forEach(new Consumer<String>() {
    @Override
    public void accept(String text) {
        System.out.println(text);
    }
});

// forEach + ラムダ式
texts.forEach(text -> System.out.println(text));

forEachメソッドは拡張for文と同じように使用できるが、ローカル変数へのアクセスはfinalもしくは実質的finalである必要がある。

spliterator()メソッドはパラレル処理時に使用される(ここでの説明は略)。

投稿者 java

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です