CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

第3章 ラムダ式を使ったプログラミング : 問題 20 : List の要素の型変換

問題

List<T>List<U>に変換するメソッド

<T, U> List<U> map(List<T> list, Function<T, U> mapper)

を実装せよ

解答

普通に考えれば以下のようにするだろう

■ 普通

public static <T, U> List<U> map(List<T> list, Function<T, U> mapper) {
    List<U> result = new ArrayList<U>(list.size());
    for (T element : list) {
        result.add(mapper.apply(element));
    }
    return result;
}

ひとひねりして Stream API を用いて解いてみよう

■ Stream API

public static <T, U> List<U> map(List<T> list, Function<T, U> mapper) {
    return list.stream()
        .map(mapper)
        .collect(Collectors.toList());
}

この式にparallel()メソッドをはさんで並列化しても、StreamORDERED特性が効いているので、結果のListの順番が入れ替わることはない