CUBは子供の白熊

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

第2章 ストリーム API の使い方 : 問題 9 : reduce メソッドのバリエーション

問題 9

Stream<ArrayList<T>>内の全ての要素を、ひとつのArrayList<T>にまとめよ
3つの Overload されたreduceを用いよ

解答

List<ArrayList<String>> listOfListが与えられているとする。

T reduce(T, BinaryOperator<T>)

ArrayList<String> list = listOfList.stream()
    .reduce(
        new ArrayList<String>(),
        (r, e) -> { r.addAll(e); return r; }
    );
list.forEach(System.out::println);

Optional<T> reduce(BinaryOperator<T>)

ArrayList<String> list = listOfList.stream()
    .reduce((r, e) -> { r.addAll(e); return r; })
    .orElse(new ArrayList<String>());
list.forEach(System.out::println);

<U> U reduce(U, BiFunction<U,? super T,U>, BinaryOperator<U>)

ArrayList<String> list = listOfList.stream()
    .reduce(
        new ArrayList<String>(),
        (r, e) -> { r.addAll(e); return r; },
        (r, s) -> { r.addAll(s); return r; }
    );
list.forEach(System.out::println);