第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()
メソッドをはさんで並列化しても、Stream
のORDERED
特性が効いているので、結果のList
の順番が入れ替わることはない