そろそろ、Java 8 を使い始めるとしよう。
今までアホなコーディングとして、List の展開、
for(E e:list) の中で、list.remove(e); を書いてしまうと、
当然、
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
として落ちますが、これを回避するのに、わざわざ他のコレクションに追加したり
みっともないコードを書いたりしてました。
でも、Java 8 の新しい機能を使えば、元のコレクションだけで手を加えるような、以下の書き方ができるのですね。
例)Integer の List があるとします。
ここから、50より小さいものを取り除きます。
List<Integer> list = new ArrayList<Integer>();
/* list に、値を追加します。
:
*/
list.removeIf((e)->{ return e < 50; });
/** 確認 */
list.forEach((i)->{ System.out.println(i); });
ラムダ式で書くわけです。
Java 8 の 新しいメソッド、removeIf の引数、Predicate が、@FunctionalInterface が着いた インターフェースだから、
default boolean removeIf(Predicate<? super E> filter)
このようにラムダ式でフィルタを書けるわけです。
徐々に皆、こういう書き方が増えていくのでしょう。