コンテンツ・メディア第1事業部のjyukutyoこと阪田です。2とGWTのチュートリアルセッションをレポートしました。Refueled”をレポートします。Refueledスライドはこちらにあります。https://stuartmarks.files.wordpress.com/2016/09/collectionsrefueled-final.pdfタイトルの通り、Javaのコレクションフレームワークについての話です。9での拡張と将来の作業についてでした。1.0はレガシーコレクション、VectorやHashtableなどである。1.2はコレクションフレームワークが導入された。インタフェースとしてCollection、List、Set、Map、Iteratorが、具象クラスとしてArrayList、HashSet、HashMap、TreeSet、TreeMapがある。5.0ではジェネリクス、java.util.concurrentパッケージが追加された。8ではラムダとストリームが追加され、インタフェースにデフォルトメソッドとstaticメソッドが定義できるようになった。15年経って初めての変更だ。8list.forEach(System.out::println);CollectionはIterableのサブインタフェースなので、これはすべてのコレクションで動作する。Iteratorインタフェースでは、ほとんどのイテレータは削除をサポートしていない。そのためこう書く必要があった。UnsupportedOperationException();}remove()のデフォルトメソッドがまさにこれだ。削除できないイテレータを作るときは、単にremove()を省くだけでよい。削除できるものを書くときは、remove()メソッドをオーバーライドするだけだ。Collectionインタフェースでは、removeIfでバルク更新ができるようになった。str.startsWith("A"));もしコレクションがArrayListなら、7の場合の計算量はO(n^2)であり、8の場合はO(n)となる。ListListインタフェースのreplaceAllもバルク処理だ。8list.replaceAll(String::toUpperCase);ただし、要素の型を変更することはできない。したいときはStreamを使う。List.sortはCollections.sortよりなぜよいのか?Collections.sortは3つのステップを使う。一時的な配列にコピーする配列をソートするリストにコピーして戻すList.sortはデフォルトでは上記と同じだが、ArrayList.sortはオーバーライドしてin-placeでソートするため、コピーはしない。Collections.sortは現在単にList.sortを呼び出すだけだ。MapMapインタフェースにもforEachがある。v));replaceAllもある。7までMulti-mapはとても扱いづらかった。Multi-mapはキーに対して複数の値があるマップだ。values()multimap.values().stream().flatMap(Set::stream);ComparatorComparatorを書いて楽しい人はいる?Comparatorは多くの条件とコードの繰り返しだ。8はComparatorにstaticとデフォルトメソッドを追加した。名字とnullがある名前でソートし、nullを最初に持ってくる2レベルのソートのサンプルを見てみよう。