Stream API で List→Map

Java8 Stream API で List→Map 生成に考えられる2通りのうち、どちらが良いのだろうか?
例)
Item クラス、キーになる int 型の code と String の name を持つ。
List<Item> list = createList(); // 生成される。。。
/*
<R> R collect(Supplier<R> supplier,
         BiConsumer<R,? super T> accumulator,
         BiConsumer<R,R> combiner)
の方法、、
*/
Map<Integer, Item> map = list.stream().collect(()->new HashMap<Integer, Item>(), (r, t)->r.put(t.code, t), (r, u)->r.putAll(u));

/* Collector<T,?,Map<K,U>> toMap(Function<? super T,? extends K> keyMapper,
                       Function<? super T,? extends U> valueMapper)
を使う方法
*/

Map<Integer, Item> map = list.stream().collect(Collectors.toMap((t)->t.code, (t)->t));

直感的に解りやすいのは後者だけど、いろんな要件に対応するために前者の形式は、
よく理解して覚えた方が良さそう。