読者です 読者をやめる 読者になる 読者になる

removeIf

そろそろ、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)

このようにラムダ式でフィルタを書けるわけです。
徐々に皆、こういう書き方が増えていくのでしょう。